1

我想在我的 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)

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

谢谢

4

2 回答 2

1

问题

您没有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

于 2020-03-27T12:58:20.673 回答
0

你缺少括号unsiged()

根据Laravel 文档

->unsigned()INTEGER列设置为UNSIGNED(MySQL)

改变

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

$table->bigInteger('user_id')->unsigned();
于 2020-03-27T12:58:18.333 回答