General error: 1005 Can't create table (errno: 150 "Foreign key constraint is incorrectly formed")
General error: 1005 Can't create table (errno: 150 "Foreign key constraint is incorrectly formed")
我在 Laravel 8 中有一个数据库迁移是这样的:
class CreateArticlesTable extends Migration
{
public function up()
{
Schema::create('articles', function (Blueprint $table) {
$table->id();
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->string('title');
$table->string('slug');
$table->text('description');
$table->text('body');
$table->string('imageUrl');
$table->string('tags');
$table->integer('viewCount')->default(0);
$table->integer('commentCount')->default(0);
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('articles');
}
}
但是每当我想要 运行 这个时,我都会得到这个错误:
一般错误:1005无法创建tableelearning
.articles
(错误号:150“外键约束形成不正确”)
我不知道这里到底出了什么问题,所以如果您知道如何解决这个问题,请告诉我...
用户的table和文章table的引擎是一样的,都是InnoDB吗? MyISAM 不支持外键。
如果是,文章 table 是否会在用户 table 之后创建?如果答案是肯定的那么:
这两个字段是否完全属于同一类型?我认为您的用户 ID 是自动递增的,如果是,则在外键中添加 unsigned :
$table->foreign('user_id')->unsigned()->references('id')->on('users')->onDelete('cascade');
而不是使用:
$table->integer('user_id')->unsigned();
使用:
$table->unsignedBigInteger();
Laravel 使用 unsignedBigInteger
是 20 位数字,而 unsignedInteger
只需要 11 位数字
https://laravel.com/docs/8.x/migrations#foreign-key-constraints
Laravel 8
试试这个
$table->id();
$table->unsignedBigInteger('user_id')->unsigned();
$table->foreign('user_id')->on('users')->references('id')->onDelete('cascade');
我在 Laravel 8 中有一个数据库迁移是这样的:
class CreateArticlesTable extends Migration
{
public function up()
{
Schema::create('articles', function (Blueprint $table) {
$table->id();
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->string('title');
$table->string('slug');
$table->text('description');
$table->text('body');
$table->string('imageUrl');
$table->string('tags');
$table->integer('viewCount')->default(0);
$table->integer('commentCount')->default(0);
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('articles');
}
}
但是每当我想要 运行 这个时,我都会得到这个错误:
一般错误:1005无法创建tableelearning
.articles
(错误号:150“外键约束形成不正确”)
我不知道这里到底出了什么问题,所以如果您知道如何解决这个问题,请告诉我...
用户的table和文章table的引擎是一样的,都是InnoDB吗? MyISAM 不支持外键。 如果是,文章 table 是否会在用户 table 之后创建?如果答案是肯定的那么: 这两个字段是否完全属于同一类型?我认为您的用户 ID 是自动递增的,如果是,则在外键中添加 unsigned :
$table->foreign('user_id')->unsigned()->references('id')->on('users')->onDelete('cascade');
而不是使用:
$table->integer('user_id')->unsigned();
使用:
$table->unsignedBigInteger();
Laravel 使用 unsignedBigInteger
是 20 位数字,而 unsignedInteger
只需要 11 位数字
https://laravel.com/docs/8.x/migrations#foreign-key-constraints
Laravel 8
试试这个$table->id();
$table->unsignedBigInteger('user_id')->unsigned();
$table->foreign('user_id')->on('users')->references('id')->onDelete('cascade');