Laravel 5.2外键错误

时间:2016-01-14 14:20:02

标签: php mysql database laravel laravel-5.2

我使用了Laravel 5的Jeffrey Way生成器创建了两个迁移。即: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');
        });

enter image description here

我在每次迁移中都调用了$table->engine = 'InnoDB';。我还要将所有id列设置为unsigned,即使它们已经是这样的。我无能为力,谁帮助我...

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

快速解决方案
删除{"X-Requested-With":"XMLHttpRequest"}并运行迁移 您可以稍后从phpMyAdmin手动添加它