我需要在用户(从laravel 7 auth脚手架创建)和类别之间创建一对多关系。 但是,当我运行迁移时,出现此错误: 迁移:2014_10_12_000000_create_users_table
Illuminate \ Database \ QueryException
SQLSTATE [HY000]:常规错误:1005无法创建表business
。users
(错误号:150“外键约束格式不正确”)(SQL:更改表{{1} }在删除级联上添加约束users
外键(users_category_id_foreign
)引用category_id
(catgories
)
这是用户架构:
id
这是类别的开启:
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('category_id');
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
$table->foreign('category_id')->references('id')->on('catgories')
->onDelete('cascade');
});
我进行了一些搜索,发现造成这种错误的原因有两个,第一是类别表迁移应在用户表一个之前完成,第二个原因是类别表上的类别ID数据类型用户架构和类别中的ID之一必须相同,我验证了这两个条件,但仍收到相同的错误。 如果有人可以告诉我怎么了,我将非常感激!
答案 0 :(得分:1)
更改on('categories')
而不是on('catgories')
是您写的catgories
。但这必须是categories
$table->foreign('category_id')->references('id')->on('categories')
->onDelete('cascade');
答案 1 :(得分:0)
当外键的类型与主键的类型不匹配时会发生这种情况。
确保category_id
的类型和长度与类别表类别的主键完全相同。因此,如果您声明为无符号大整数,请确保categories.id
是无符号大整数。