首页 > 解决方案 > 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 imagesadd constraint images_user_id_foreignforeign key ( user_id) references users( id) on delete cascade)

我已经在谷歌上搜索但没有成功,有人可以帮助我吗?

谢谢

标签: laravellaravel-7

解决方案


问题

您没有unsigned正确设置。

解决方案

代替:

$table->bigInteger('user_id')->unsigned;

经过:

$table->bigInteger('user_id')->unsigned();

解释

由于不是无符号的,因此定义与表user_id的不匹配,这意味着您无法设置外键。idusers

在 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


推荐阅读