Laravel migration General error: 1215 Cannot add foreign key constraint Laravel 7.x
Laravel migration General error: 1215 Cannot add foreign key constraint 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
添加约束 images_user_id_foreign
外键(user_id
) 在删除级联时引用 users
(id
)
我已经搜索了 google 没有成功,有人可以帮助我吗?
谢谢
您在 unsiged()
中缺少括号
->unsigned()
Set INTEGER
columns as UNSIGNED
(MySQL)
改变
$table->bigInteger('user_id')->unsigned;
到
$table->bigInteger('user_id')->unsigned();
问题
您没有正确设置 unsigned
。
解决方案
替换:
$table->bigInteger('user_id')->unsigned;
作者:
$table->bigInteger('user_id')->unsigned();
说明
由于user_id
不是无符号的,定义与users
的id
不匹配table这意味着你不能设置外键。
之前 Laravel 7.x
你也可以这样做:
$table->unsignedBigInteger('user_id');
Laravel 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
我想在我的 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
添加约束 images_user_id_foreign
外键(user_id
) 在删除级联时引用 users
(id
)
我已经搜索了 google 没有成功,有人可以帮助我吗?
谢谢
您在 unsiged()
->unsigned()
SetINTEGER
columns asUNSIGNED
(MySQL)
改变
$table->bigInteger('user_id')->unsigned;
到
$table->bigInteger('user_id')->unsigned();
问题
您没有正确设置 unsigned
。
解决方案
替换:
$table->bigInteger('user_id')->unsigned;
作者:
$table->bigInteger('user_id')->unsigned();
说明
由于user_id
不是无符号的,定义与users
的id
不匹配table这意味着你不能设置外键。
之前 Laravel 7.x
你也可以这样做:
$table->unsignedBigInteger('user_id');
Laravel 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