Mysql 是否可以在Laravel中String/varchar类型列的两个表之间创建外键关系?
我有一个类别表,它有一个id和一个slug(varchar类型)列。我想创建一个子类别表,它将有一个列category_slug(varchar类型),该列将引用类别表中的slug列 我在php artisan迁移期间遇到错误Mysql 是否可以在Laravel中String/varchar类型列的两个表之间创建外键关系?,mysql,database,laravel,laravel-5,laravel-5.4,Mysql,Database,Laravel,Laravel 5,Laravel 5.4,我有一个类别表,它有一个id和一个slug(varchar类型)列。我想创建一个子类别表,它将有一个列category_slug(varchar类型),该列将引用类别表中的slug列 我在php artisan迁移期间遇到错误 Schema::create('subcategories', function (Blueprint $table) { $table->increments('id'); $table->string('catego
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();
});
终端中的错误如下所示
[Illumb\Database\QueryException]SQLSTATE[HY000]:一般错误:
1005无法创建表laravel\u eshopper
<代码>#sql-ee8_272(错误号:
150“外键约束格式不正确”)(SQL:alter table
tabpanes
add constrainttabpanes\u category\u slug\u foreign
foreign
键(category\u slug
)引用categories
(slug
)
[PDOException]SQLSTATE[HY000]:一般错误:1005无法创建
表laravel\u eshopper
<代码>#sql-ee8_272(错误号:150“外键
约束格式不正确“)
是的,您当然可以这样做,请参见下面的示例: 假设您的类别表如下所示:
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();
});
是的,您当然可以这样做,请参见下面的示例: 假设您的类别表如下所示:
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();
});
为什么会有这种类型的数据库设计?子类别表中有另一列“product_id”。我编辑了该帖子。该帖子存储了产品表中产品的id。我希望看到子类别表的任何人都能轻松理解哪个产品属于哪个类别。外键关系将帮助我在子类别中插入数据表很容易,因为在从phpmyadmin插入子类别表时,所有的slug都将作为下拉列表出现。为什么需要为
子类别创建另一个表,您可以在类别中创建parent\u id
。为什么要进行这种类型的数据库设计?在子类别表中还有另一列“product\u id”。我已经编辑了这篇文章。它存储了产品表中的产品id。我希望看到子类别表的任何人都能轻松了解哪些产品属于哪个类别。A外键关系将帮助我轻松地在子类别表中插入数据,因为在从phpmyadmin插入子类别表时,所有的slug都将作为下拉列表。为什么需要为子类别创建另一个表
,您可以在类别
中创建父id
。谢谢!!类别表中我的slug列定义不唯一。谢谢!!类别表中我的slug列的定义不唯一。