Laravel更新多对多外键记录
问题描述:
我有User
,Role
和User_Role
表,其中包含User和Role表之间的多对多关系。Laravel更新多对多外键记录
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_id
和role_id
你
$user->roles()->wherePivot('id', $userRoleId)->updateExistingPivot($oldRoleId, ['role_id' => $newRoleId]);
答
$user->roles()->updateExistingPivot($roleId, ['role_id' => $newRoleId]);
只想更新一行,尽量使用newPivotStatement()
:
$user->roles()->newPivotStatement()->where('id', $userRoleId)->update(['role_id' => $newRoleId]);
与解决@Yosua Lijanto BINAR:
$user->roles()->wherePivot('id', $userRoleId)->updateExistingPivot($oldRoleId, ['role_id' => $newRoleId]);
遗憾的是,不能正常工作。 –
哦,你用'updateExistingPivot()'更新了你的问题。我想知道你的例子中'$ userRoleId'是什么?这是一个旧的角色ID? –
它是User_Role表的主键。 –