2
ユーザーとロールテーブルの間に多対多の関係を持つ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_Role
のレコードを変更または削除せずにUser
の役割を更新するにはどうすればよいですか?またはUser_Role.id
を変更または削除せずにUser_Role.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
の複数のペアを使用している場合あなたがupdateExistingPivot()
$user->roles()->updateExistingPivot($roleId, ['role_id' => $newRoleId]);
を試すことができます最初
$user->roles()->wherePivot('id', $userRoleId)->updateExistingPivot($oldRoleId, ['role_id' => $newRoleId]);
残念ながら、動作しません。 –
あなたはあなたの質問を 'updateExistingPivot()'で更新しました。私はあなたの例で '$ userRoleId'が何であるのだろうか?これは古いロールIDですか? –
User_Roleテーブルの主キーです。 –