我有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
表记录的情况下更新User_Role
的角色?或者换句话说,如何更新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]);
答案 0 :(得分:2)
$user->roles()->updateExistingPivot($roleId, ['role_id' => $newRoleId]);
如果您使用多对完全相同的user_id
和role_id
并且只想更新一行,请尝试使用newPivotStatement()
:
$user->roles()->newPivotStatement()->where('id', $userRoleId)->update(['role_id' => $newRoleId]);
@Yosua Lijanto Binar的解决方案:
$user->roles()->wherePivot('id', $userRoleId)->updateExistingPivot($oldRoleId, ['role_id' => $newRoleId]);