Php Laravel 5.2外键错误
我用Jeffrey Way Generator为Laravel 5创建了两个迁移。即:Php Laravel 5.2外键错误,php,mysql,database,laravel,laravel-5.2,Php,Mysql,Database,Laravel,Laravel 5.2,我用Jeffrey Way Generator为Laravel 5创建了两个迁移。即:php artisan make:migrate:schema create_roles\u table--schema='name:string,description:text'和php artisan make:migrate:pivot user role 现在,我的MySQL数据库默认为InnoDB,我读到的应该是。我还将外键设置移到了Schema::table(),而不是Schema::create
php artisan make:migrate:schema create_roles\u table--schema='name:string,description:text'
和php artisan make:migrate:pivot user role
现在,我的MySQL数据库默认为InnoDB
,我读到的应该是。我还将外键设置移到了Schema::table()
,而不是Schema::create('role\u user')
。我的迁移应该没有任何问题,但它们会出现以下错误:一般错误:1215无法添加外键约束(SQL:alter table role\U user add constraint role\U user\U id\U外键(user\U id)引用delete cascade上的user(id)
我已经调用了
$table->engine='InnoDB'代码>在每次迁移中。我还将所有id
列设置为unsigned
,即使它们已经是这样了。我不知道是谁帮了我的忙。检查您是否已经迁移了表用户和角色。否则,您将无法创建外键。还要检查您的迁移顺序。如果您在用户和角色之前迁移此文件,它将失败。显然,这是一个巨大的错误<例如,代码>用户
而不是用户
。我本来希望Laravel能做到这一点,但不幸的是,Laravel和我都没有做到。这可能与您的SQL引擎有关,请检查您的引擎(mariadb,mysql,…)
然后阅读引擎中有关外键的文档
快速解决方案
删除删除('cascade')并运行迁移。
您可以稍后从phpMyAdmin手动添加它顺序似乎正确:-用户-角色-角色\用户透视表-外键。我还删除了所有表并重新运行了所有迁移。
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');
});