如何使用uuid而不是增加主键来解决“无法添加外键约束”错误

时间:2019-05-14 17:17:44

标签: laravel eloquent

编辑:已解决,我忘记了uuid字段上->primary()上的括号。

我正在尝试将我的应用程序从增加ID切换到uuid。目前,我仅在create_users_table上切换为uuid。第一个具有指向我的用户表的外键的表是create_groups_table,当我尝试运行迁移时,我的外键约束失败。

我为外键尝试了不同的值,但无济于事。

这是相关的代码。

create_users_table:

    Schema::create('users', function (Blueprint $table) {
        $table->uuid('id')->primary;
        $table->string('name');
        $table->string('email')->unique();
        $table->timestamps();
    });

create_groups_table:

    Schema::create('groups', function (Blueprint $table) {
        $table->uuid('id')->primary();
        $table->string('title');
        $table->uuid('user_id')->nullable();
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        $table->timestamps();
    });

我希望迁移能够运行,但是我得到:

Illuminate\Database\QueryException  : SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `groups` add constraint `groups_user_id_foreign` foreign key (`user_id`) references `users` (`id`) on delete cascade)

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

我在uuid字段的->primary()上忘记了括号:

   Schema::create('users', function (Blueprint $table) {
        $table->uuid('id')->primary();
        $table->string('name');
        $table->string('email')->unique();
        $table->timestamps();
    });