2016-11-13 63 views
2

我有User,RoleUser_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_idrole_id

$user->roles()->wherePivot('id', $userRoleId)->updateExistingPivot($oldRoleId, ['role_id' => $newRoleId]); 

回答

2

您可以嘗試updateExistingPivot()

$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]); 
+0

遺憾的是,不能正常工作。 –

+0

哦,你用'updateExistingPivot()'更新了你的問題。我想知道你的例子中'$ userRoleId'是什麼?這是一箇舊的角色ID? –

+0

它是User_Role表的主鍵。 –