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');