关于Laravel迁移的许多人

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Laravel迁移的许多人相关的知识,希望对你有一定的参考价值。

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

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

这是我的Users表迁移:

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();
});

这是我的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');
    });

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

  [IlluminateDatabaseQueryException]
  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
答案

我删除了所有的表,只剩下4个表,create_user_table,create_password_reset,create_roles_table,create_role_user,一切正常。直到现在我不明白是什么造成这个错误,虽然我已经把相同的订单。

另一答案

可能你的问题在于创建迁移的顺序。

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

  1. 2018_06_02_023539_create_roles_table的角色
  2. 2018_06_02_023800_create_role_user_table中的role_user
  3. 用户在2018_06_02_023815_create_users_table

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

2018_06_02_023800_create_role_user_table => 2018_06_02_023820_create_role_user_table

另一答案

config/database.phpmysql array取代strict值为false

    'strict' => false

以上是关于关于Laravel迁移的许多人的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 数据透视表时间戳

无法在 Laravel 迁移中添加外键约束

如何在 Laravel 中的多个数据库上运行迁移?

Laravel 数据迁移

如何解决 laravel 迁移错误“一般错误:1005 无法创建表”

Laravel 迁移无法添加外键