我有一个类别表,它有一个id和一个slug(varchar类型)列。我想创建一个子类别表,它将有一个category_slug(varchar类型)列,它将引用Category表中的slug列。 / p>
我在php artisan migrate期间遇到错误。
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 tabletabpanes
添加约束tabpanes_category_slug_foreign
外来 密钥(category_slug
)引用categories
(slug
))[PDOException] SQLSTATE [HY000]:常规错误:1005无法创建 表格1}}。
laravel_eshopper
(错误:150"外键 约束形成错误")
答案 0 :(得分: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();
});