我有3张表互相连接。表名称的角色,role_user和用户。我想在laravel上进行迁移并添加一些约束。以及我的角色表迁移中的内容:
Schema::create('roles', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('description');
$table->timestamps();
});
这是我的用户表迁移:
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('username')->unique();
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->boolean('active')->default(0);
$table->softDeletes();
$table->rememberToken();
$table->timestamps();
});
这是我的role_user表迁移:
Schema::create('role_user', function (Blueprint $table) {
$table->integer('role_id')->unsigned();
$table->integer('user_id')->unsigned();
$table->unique(['role_id', 'user_id']);
$table->foreign('role_id')->references('id')->on('roles')
->onDelete('cascade')->onUpdate('cascade');
$table->foreign('user_id')->references('id')->on('users')
->onDelete('cascade')->onUpdate('cascade');
});
在我的迁移顺序中,我已将角色表放在用户之上,但我遇到了这种错误:
[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `role_user` add constraint `role_user_role_id_foreign` foreign key (`role_id
`) references `roles` (`id`) on delete cascade on update cascade)
[PDOException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint
答案 0 :(得分:0)
我删除了所有表,只剩下4个表,create_user_table,create_password_reset,create_roles_table,create_role_user,一切正常。直到现在我还不明白是什么造成了这个错误,尽管我已经订了相同的订单。
答案 1 :(得分:0)
可能您的问题出在创建迁移的顺序上。
Laravel使用文件名中的时间戳按创建顺序运行迁移,因此,如果按照以下顺序创建迁移,则
2018_06_02_023539_create_roles_table
中角色2018_06_02_023800_create_role_user_table
中的角色用户在表2018_06_02_023815_create_users_table
中引用表users
时将不存在,从而导致SQL错误。
您可以做的最简单的修复是通过以下方式重命名role_user
迁移文件:
role_user
=> 2018_06_02_023800_create_role_user_table
答案 2 :(得分:0)
在数据透视表上试试这个
public function up()
{
Schema::create('role_user', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('role_id');
$table->unsignedBigInteger('user_id');
$table->timestamps();
$table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
}
答案 3 :(得分:-1)
转到config/database.php
mysql array
将strict
值替换为false
'strict' => false