laravel - Laravel 迁移一般错误:1215 无法添加外键约束 Laravel 7.x
问题描述
我想在我的 laravel 7.x 应用程序上使用两个模型:用户和图像:
# Users migration : 2014_10_12_000000_create_users_table.php
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
# Images migration : 2020_03_27_121254_create_models_images_table
Schema::create('images', function (Blueprint $table) {
$table->bigIncrements('id');
$table->bigInteger('user_id')->unsigned;
$table->string('name');
$table->timestamps();
});
Schema::table('images', function (Blueprint $table) {
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
尝试迁移时收到以下错误:一般错误:1215 无法添加外键约束(SQL:alter table images
add constraint images_user_id_foreign
foreign key ( user_id
) references users
( id
) on delete cascade)
我已经在谷歌上搜索但没有成功,有人可以帮助我吗?
谢谢
解决方案
问题
您没有unsigned
正确设置。
解决方案
代替:
$table->bigInteger('user_id')->unsigned;
经过:
$table->bigInteger('user_id')->unsigned();
解释
由于不是无符号的,因此定义与表user_id
的不匹配,这意味着您无法设置外键。id
users
在 Laravel 7.x 之前
你也可以这样做:
$table->unsignedBigInteger('user_id');
拉拉维尔 7.x
从 Laravel 7 开始,您可以在users
迁移中这样做:
Schema::table('users', function (Blueprint $table) {
$table->id();
// ...
});
在您的images
迁移中:
Schema::table('users', function (Blueprint $table) {
// ...
$table->foreignId('user_id')->constrained();
});
您可以在此处找到更多信息:https ://laravel.com/docs/7.x/migrations#foreign-key-constraints
推荐阅读
- java - 函数是否只返回值作为来自 ConcurrentHashMap 的对象
需要同步吗? - swift - Swift Package Manager executable app, set deployment target
- c++ - Qudpsocket类使用
- machine-learning - 我们可以保存一个部分训练的机器学习模型,重新加载它并从保存的点开始训练吗?
- reactjs - AWS Amplify 用户会话在 ReactJS 中不会过期
- javascript - JS Cookie 在服务器端不可用?
- xcode - 无论我尝试什么,可可中的 NSView 都拒绝重绘
- amazon-redshift - CASE 语句中 LIKE 运算符的红移限制
- android - Base64 编码的 EC 私钥字符串到 PrivateKey
- python-3.x - 在同一行上创建一个具有最少其他列的新列