我已经使用Jeffrey Way生成器为Laravel5创建了两个迁移,即:php artisan make:migrate:schema create_roles_table --schema='name:string, description:text'和php artisan make:migrate:pivot user role。
现在,我的MySQL数据库默认使用InnoDB,我读到应该是这样。我还将外键设置从Schema::create('role_user')移到了Schema::table()。我的迁移应该不会有任何问题,但是它们会出错: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,即使它们已经是这样的了。我一无所知,谁来帮我..
发布于 2016-01-14 22:31:07
检查是否已迁移表users和roles。否则,您将无法创建外键。也请检查您的迁移顺序。如果您在迁移用户和角色之前迁移此文件,它将失败。
发布于 2016-01-15 00:04:10
很明显这是个很大的打字错误。例如,使用user而不是users。我曾希望Laravel能做到这一点,但不幸的是,Laravel和我也没有做到。
发布于 2017-05-15 02:24:39
这可能与您的SQL引擎有关,请检查您的引擎(mariadb、mysql等)
然后阅读引擎中有关外键的文档。
快速解决方案
删除onDelete('cascade')并运行迁移。
您可以稍后从phpMyAdmin手动添加它
https://stackoverflow.com/questions/34791855
复制相似问题