【问题标题】:Laravel 5.2 foreign key errorsLaravel 5.2 外键错误
【发布时间】:2016-01-14 14:20:02
【问题描述】:

我使用 Jeffrey Way 生成器为 Laravel 5 创建了两个迁移。即:php artisan make:migrate:schema create_roles_table --schema='name:string, description:text'php artisan make:migrate:pivot user role

现在,我的 MySQL 数据库默认为 InnoDB,我读过应该是这样。我还将外键设置移动到Schema::table() 而不是Schema::create('role_user')。我的迁移应该没有任何问题,但它们会出错:General error: 1215 Cannot add foreign key constraint (SQL: alter table role_user add constraint role_user_user_id_foreign foreign key (user_id) references user (id) on delete cascade)

Schema::create('role_user', function (Blueprint $table) {
            $table->engine = 'InnoDB';
            $table->integer('role_id')->unsigned()->index();
            $table->integer('user_id')->unsigned()->index();
            $table->primary(['role_id', 'user_id']);
        });

        Schema::table('role_user', function(Blueprint $table){
            $table->foreign('user_id')->references('id')->on('user')->onDelete('cascade');
            $table->foreign('role_id')->references('id')->on('role')->onDelete('cascade');
        });

我在每次迁移中都致电$table->engine = 'InnoDB';。我也将所有id 列设置为unsigned,即使它们已经是这样了。我一无所知,谁帮帮我..

【问题讨论】:

    标签: php mysql database laravel laravel-5.2


    【解决方案1】:

    检查您是否已经迁移了表用户和角色。否则您将无法创建外键。还要检查您的迁移顺序。如果您在用户和角色之前迁移这个,它将失败。

    【讨论】:

    • 顺序似乎是正确的: - 用户 - 角色 - Role_User 数据透视表 - 外键。我还删除了所有表并重新运行了所有迁移。
    【解决方案2】:

    嗯,显然这是一个巨大的错字。例如,user 而不是 users。我曾希望 Laravel 能做到这一点,但不幸的是 Laravel 和我也没有做到。

    【讨论】:

      【解决方案3】:

      这可能与您的 SQL 引擎有关,请检查您的引擎(mariadb、mysql、...)
      然后从您的引擎中阅读有关外键的文档。


      快速解决方案
      删除 onDelete('cascade') 并运行迁移。
      您可以稍后从 phpMyAdmin 手动添加它

      【讨论】: