首页 文章

是否可以在Laravel中的String / varchar类型列上的两个表之间创建外键关系?

提问于
浏览
0

我有一个类别表,其中有一个id和一个slug(varchar类型)列 . 我想创建一个子类别表,它将有一个category_slug(varchar类型)列,它将引用Category表中的slug列 .

我在php artisan迁移期间遇到错误 .

Schema::create('subcategories', function (Blueprint $table) {
        $table->increments('id');
        $table->string('category_slug')->unique();
        $table->integer('product_id');
        $table->foreign('category_slug')
       ->references('slug')->on('categories');
        $table->timestamps();
  });

终端中的错误是 .

[Illuminate \ Database \ QueryException] SQLSTATE [HY000]:常规错误:1005无法创建表laravel_eshopper . #sql-ee8_272(错误:150“外键约束形成错误”)(SQL:alter table tabpanes add constraint tabpanes_category_slug_foreign外键(category_slug)引用类别(slug))[PDOException] SQLSTATE [HY000]:一般错误:1005可以不要创建表laravel_eshopper . #sql-ee8_272(错误:150“外键约束形成错误”)

1 回答

  • 1

    是的你当然可以做到这一点见下面的例子:

    假设您有类别表,如下所示:

    Schema::create('categories', function (Blueprint $table) {
            $table->increments('id');
            $table->string('slug')->unique();
            $table->timestamps();
      });
    

    现在您可以使用外键创建子类别,如下所示:

    Schema::create('subcategories', function (Blueprint $table) {
            $table->increments('id');
            $table->string('category_slug')->unique();
            $table->foreign('category_slug')
           ->references('slug')->on('categories')->onUpdate('cascade')
            ->onDelete('cascade');
            $table->timestamps();
      });
    

相关问题