我使用了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');
});
我在每次迁移中都调用了$table->engine = 'InnoDB';
。我还要将所有id
列设置为unsigned
,即使它们已经是这样的。我无能为力,谁帮助我...
答案 0 :(得分:0)
检查您是否已迁移表用户和角色。否则您将无法创建外键。检查您的迁移顺序。如果要在用户和角色之前迁移此文件,它将失败。
答案 1 :(得分:0)
user
代替users
。我曾希望Laravel能做到这一点,但不幸的是Laravel和我也没有。
答案 2 :(得分:0)
这可能与您的SQL引擎有关,请检查您的引擎(mariadb,mysql,...)
然后阅读引擎中有关外键的文档。
快速解决方案
删除{"X-Requested-With":"XMLHttpRequest"}
并运行迁移
您可以稍后从phpMyAdmin手动添加它