SQLSTATE [HY000]:一般错误:1005无法创建表`business`.`users`(错误号:150“外键约束格式不正确”)Laravel 7

时间:2020-08-31 13:49:54

标签: php mysql laravel one-to-many

我需要在用户(从laravel 7 auth脚手架创建)和类别之间创建一对多关系。 但是,当我运行迁移时,出现此错误: 迁移:2014_10_12_000000_create_users_table

Illuminate \ Database \ QueryException

SQLSTATE [HY000]:常规错误:1005无法创建表businessusers(错误号:150“外键约束格式不正确”)(SQL:更改表{{1} }在删除级联上添加约束users外键(users_category_id_foreign)引用category_idcatgories

这是用户架构:

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之一必须相同,我验证了这两个条件,但仍收到相同的错误。 如果有人可以告诉我怎么了,我将非常感激!

2 个答案:

答案 0 :(得分:1)

更改on('categories')而不是on('catgories')是您写的catgories。但这必须是categories

$table->foreign('category_id')->references('id')->on('categories')
        ->onDelete('cascade');

答案 1 :(得分:0)

当外键的类型与主键的类型不匹配时会发生这种情况。

确保category_id的类型和长度与类别表类别的主键完全相同。因此,如果您声明为无符号大整数,请确保categories.id是无符号大整数。