mysql - 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 文档,但出现此错误。
任何的想法?
解决方案
问题是您的主键列和外键列的类型不匹配。
您的主键列是UUID
,您的外键列是BIGINT
.
更改以下内容应该可以解决错误:
$table->foreignId('school_id')->constrained('schools')->onDelete('cascade');
到
$table->uuid('school_id')->constrained('schools')->onDelete('cascade');
推荐阅读
- asp.net-core - 如何使用 LoginId 调用 IdentityServer4 SignOut
- python - 如何在 Python 中将 PID 写入文件?
- node.js - 如何从 vuejs3 中的 fs.readFile 获取数据
- linux - 在开源 QT 中安装 MQTT 模块
- javascript - 添加更多由 php 生成的选择字段
- node.js - 使用 exec 获取函数的输出,使用 execSync 获取另一个函数的输出到文件和标准输出
- nginx - 如何通过 NGINX Ingress Controller 暴露端口 22?
- sql - 将日期列表转换为 DateFrom/DateTo 范围的最佳方法
- python - 为什么 pandas str.replace 用 .* 模式多次插入替换值
- python - 在 Python 中对项目进行排序