Laravel 迁移的多对多

Yin*_*ing 8 migration laravel laravel-5

我有 3 张桌子可以相互连接。表名称的角色、role_user 和用户。我想在 laravel 上进行迁移并添加一些约束。这是我的角色表迁移中的内容:

    Schema::create('roles', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('description');
        $table->timestamps();
    });
Run Code Online (Sandbox Code Playgroud)

这是我的用户表迁移:

Schema::create('users', function (Blueprint $table) {
    $table->increments('id');
    $table->string('username')->unique();
    $table->string('name');
    $table->string('email')->unique();
    $table->string('password');
    $table->boolean('active')->default(0);
    $table->softDeletes();
    $table->rememberToken();
    $table->timestamps();
});
Run Code Online (Sandbox Code Playgroud)

这是我的 role_user 表迁移:

    Schema::create('role_user', function (Blueprint $table) {
        $table->integer('role_id')->unsigned();
        $table->integer('user_id')->unsigned();

        $table->unique(['role_id', 'user_id']);
        $table->foreign('role_id')->references('id')->on('roles')
            ->onDelete('cascade')->onUpdate('cascade');
        $table->foreign('user_id')->references('id')->on('users')
            ->onDelete('cascade')->onUpdate('cascade');
    });
Run Code Online (Sandbox Code Playgroud)

在我的迁移顺序中,我已经将角色表放在用户之上,但是我遇到了这种错误:

  [Illuminate\Database\QueryException]
  SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `role_user` add constraint `role_user_role_id_foreign` foreign key (`role_id
  `) references `roles` (`id`) on delete cascade on update cascade)



  [PDOException]
  SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint
Run Code Online (Sandbox Code Playgroud)

小智 6

您的问题可能与迁移的创建顺序有关。

Laravel 使用文件名中的时间戳按创建顺序运行迁移,因此,如果您按以下顺序创建它们:

  1. 角色在2018_06_02_023539_create_roles_table
  2. 角色_用户在2018_06_02_023800_create_role_user_table
  3. 用户在2018_06_02_023815_create_users_table

users在 table 中引用时该表将不存在role_user,从而导致 SQL 错误。您可以做的最简单的修复是以role_user这种方式重命名迁移文件:

2018_06_02_023800_create_role_user_table=>2018_06_02_023820_create_role_user_table


Yin*_*ing -1

我删除了所有表,只留下 4 个表:

create_user_table,
create_password_reset, 
create_roles_table, 
create_role_user 
Run Code Online (Sandbox Code Playgroud)

一切正常。

到目前为止,我不明白是什么导致了这些错误,尽管我已经下了相同的订单。