我有一个类别表有一个id和一个slug(varchar类型)列。我想要创建一个子类别表,它将有一个列category_slug(varchar类型),它将引用类别表中的slug列。是否有可能在Laravel的String/varchar类型列上的两个表之间创建外键关系?
我在使用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]: General error: 1005 Can't create table
laravel_eshopper
.#sql-ee8_272
(errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter tabletabpanes
add constrainttabpanes_category_slug_foreign
foreign key (category_slug
) referencescategories
(slug
))[PDOException] SQLSTATE[HY000]: General error: 1005 Can't create table
laravel_eshopper
.#sql-ee8_272
(errno: 150 "Foreign key constraint is incorrectly formed")
为什么这种类型的数据库设计? –
子类别表中还有另外一列'product_id'。我已经编辑过这个帖子,它存储了产品表中的产品id。我希望任何人都能看到子类别表,可以很容易地理解哪个产品属于哪个类别。一个外键关系将帮助我轻松地在子类别表格中插入数据,因为所有的slug在从phpmyadmin插入子类别表格时将作为下拉菜单来下载。 –
为什么您需要为'子类别'创建另一个表格,则可以在'类别'中创建'parent_id'。 –