【问题标题】:laravel migration SQLSTATE[HY000]laravel 迁移 SQLSTATE[HY000]
【发布时间】:2020-10-13 03:57:11
【问题描述】:

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

SQLSTATE[HY000]:一般错误:1215 无法添加外键 约束(SQL:alter table 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 documentation,但出现此错误。

有什么想法吗?

【问题讨论】:

  • $table->id(); 也让你的id 独一无二,primaryauro_increament,他们为什么要使用$table->uuid('id')->primary(); 而不是那个? [你的外键属于这个is]
  • @RonvanderHeijden screenshot ibb.co/mD77vFB
  • @TalhaF。 uuid 是唯一的,不必自动递增,它是随机字符串
  • 你可以试试$table->id();希望问题消失
  • foreignId('user_id')改成uuid('user_id')就够了

标签: mysql laravel database-migration


【解决方案1】:

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

你的主键列是UUID,你的外键列是BIGINT

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

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

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

【讨论】:

  • foreignId 方法是unsignedBigInteger 的别名,而uuid 不是integer 也不是unsigned 值。无论如何,它真的很有帮助
猜你喜欢
  • 2020-04-10
  • 1970-01-01
  • 2020-08-20
  • 2021-12-03
  • 2019-07-24
  • 2020-05-13
  • 2020-03-19
  • 1970-01-01
  • 2017-01-31
相关资源
最近更新 更多