首页 > 解决方案 > laravel 迁移 SQLSTATE[HY000]

问题描述

由于此错误,我无法运行迁移命令:

SQLSTATE [HY000]:一般错误:1215 无法添加外键约束(SQL:删除级联时更改表user_schools添加约束 user_schools_school_id_foreign外键(school_id)引用 schools( ))id

代码

users

 Schema::create('users', function (Blueprint $table) {
        $table->uuid('id')->primary();
        $table->string('name');
        $table->string('email')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->rememberToken();
        $table->softDeletes('deleted_at', 0);
        $table->timestamps();
 });

schools

Schema::create('schools', function (Blueprint $table) {
        $table->uuid('id')->primary();
        $table->string('code')->unique();
        $table->string('name');
        $table->set('type', ['TK', 'SD', 'SMP', 'SMA', 'SMK']);
        $table->softDeletes('deleted_at', 0);
        $table->timestamps();
});

user_schools

Schema::create('user_schools', function (Blueprint $table) {
        $table->uuid('id')->primary();
        $table->foreignId('school_id')->constrained('schools')->onDelete('cascade');
        $table->foreignId('user_id')->constrained('users')->onDelete('cascade');
        $table->set('type', ['Manager', 'Staff', 'Teacher', 'Student']);
        $table->softDeletes('deleted_at', 0);
        $table->timestamps();
});

注意:我的迁移文件基于laravel 文档,但出现此错误。

任何的想法?

标签: mysqllaraveldatabase-migration

解决方案


问题是您的主键列和外键列的类型不匹配。

您的主键列是UUID,您的外键列是BIGINT.

更改以下内容应该可以解决错误:

$table->foreignId('school_id')->constrained('schools')->onDelete('cascade');

$table->uuid('school_id')->constrained('schools')->onDelete('cascade');

推荐阅读