[伙计们,我尝试了很多东西,读了一些博客或讨论,但是我没有解决我的问题,我是laravel这个项目的新手。当我想更新此错误的角色时出现错误,例如
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or
update a child row: a foreign key constraint fails
(`shop`.`permission_role`, CONSTRAINT
`permission_role_permission_id_foreign` FOREIGN KEY (`permission_id`)
REFERENCES `permissions` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)
(SQL: insert into `permission_role` (`permission_id`, `role_id`)
values (9, 17))
我的迁移
public function up()
{
Schema::create('roles', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('title')->nullable();
$table->timestamps();
});
Schema::create('permissions', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('title')->nullable();
$table->timestamps();
});
Schema::create('role_user', function (Blueprint $table) {
$table->integer('role_id')->unsigned();
$table->integer('user_id')->unsigned();
$table->foreign('role_id')
->references('id')
->on('roles')
->onDelete('cascade')
->onUpdate('cascade');
$table->foreign('user_id')
->references('id')
->on('users')
->onDelete('cascade')
->onUpdate('cascade');
$table->primary(['role_id','user_id']);
});
Schema::create('permission_role', function (Blueprint $table) {
$table->integer('role_id')->unsigned();
$table->integer('permission_id')->unsigned();
$table->foreign('role_id')
->references('id')
->on('roles')
->onDelete('cascade')
->onUpdate('cascade');
$table->foreign('permission_id')
->references('id')
->on('permissions')
->onDelete('cascade')
->onUpdate('cascade');
$table->primary(['permission_id','role_id']);
});
}
我的控制器
public function store(Request $request)
{
$role=Role::create([
'name'=>$request['name'],
'title'=>$request['title'],
]);
$role->permissions()->sync($request->input(['permission_id']));
return redirect(route('role.index'));
}
您为枢轴进行的迁移正在添加复合主键:
$table->primary(['role_id','user_id']);
$table->primary(['permission_id','role_id']);
这与添加外键不同。您实际上并不需要这些主键,但是如果需要主键,建议您通过普通的increments
方法添加它:
$table->increments('id');
尝试从两个数据透视表中取出这些组合键,然后重新运行迁移。然后尝试再次创建一个用户并向该用户添加权限。我认为您不想为角色添加权限-从简单的事情开始-成为用户并添加权限。然后重新评估您是否真的想要一个权限角色枢纽。