我有三个表,分别是 User
(用户)、Role
(角色)和 User_Role
(用户-角色),其中 User 和 Role 表之间存在多对多的关系。
class User extends Model {
public function roles {
return $this->belongsToMany('App\Role');
}
}
class Role extends Model {
public function users {
return $this->belongsToMany('App\User');
}
}
User
- id
- other_columns
Role
- id
- other_columns
User_Role
- id
- user_id
- role_id
- other_columns
User_Role
可以有多个相同的记录,但Role_User.id
不同。
如何在不更改或删除User_Role
表记录的情况下更新User
的角色?或者换句话说,如何更新User_Role.role_id
而不更改或删除User_Role.id
?
我已经尝试过:
$user->roles()->updateExistingPivot($userRoleId, ['role_id' => $newRoleId]);
并且
$user->roles()->sync($userRoleId, ['id' => $userRoleId, 'role_id' => $newRoleId, 'user_id' => $userId]);
但它们不起作用。
更新
这段代码可以工作,但它也会更改其他记录。
$user->roles()->updateExistingPivot($oldRoleId, ['role_id' => $newRoleId]);
我尝试了先进行过滤
$user->roles()->wherePivot('id', $userRoleId)->updateExistingPivot($oldRoleId, ['role_id' => $newRoleId]);
updateExistingPivot()
。我想知道你的例子中$userRoleId
是什么?它是旧的角色ID吗? - Alexey MezeninUser_Role(id->1, user_id->1, role_id->1)
,User_Role(id->2, user_id->2, role_id->2)
,然后我运行那段代码。它会更改两个记录。有什么解决办法吗? - Yosua Lijanto Binaruser_id
和role_id
是相同的吗? - Alexey Mezenin