我想添加两个表,一个产品表和一个类别表。然后,我想将产品表中的类别ID链接到类别表中的主键。这是我的代码:
创建我的产品表的代码:
public function up()
{
Schema::create('products', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('title');
$table->string('imgpath');
$table->text('description');
$table->integer('price');
$table->integer('hotItemNumber')->nullable();
$table->timestamps();
$table->softDeletes();
});
}
创建我的类别表的代码:
public function up()
{
Schema::create('categories', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('categroyName');
$table->timestamps();
});
}
用于创建我的外键的代码(在单独的迁移文件中):
public function up()
{
Schema::table('products', function($table) {
$table->integer('category_id')->unsigned()->index();
$table->foreign('category_id')->references('id')->on('categories');
});
}
我希望创建一个外键,但是会出现错误。
SQLSTATE [HY000]:常规错误:1215无法添加外键约束 (SQL:更改表
products
添加约束products_categoryid_foreign
个外键(categoryid
)引用categories
(id
))
答案 0 :(得分:1)
在您的新迁移中,尝试更改以下类型
public function up()
{
Schema::table('products', function($table) {
$table->bigInteger('category_id')->unsigned()->index();
$table->foreign('category_id')->references('id')->on('categories');
});
}
因为在您的categories
表中,该ID的类型为bigIncrements
答案 1 :(得分:1)
因此,您的products
表id
具有int
数据类型,categoryid
应该具有相同的数据类型。
改为使用$table->unsignedBigInteger('categoryid');
。
外键列必须具有相同的数据类型+相同的长度+ 与相应参考列的比例相同