问题
I'm trying to update a pivot table like this:
public function updatePermission($id, $permissionId)
{
$permissionValue = Input::get('value');
$user = User::find($id);
$perms = ['value' => $permissionValue];
$user->permissions()->updateExistingPivot($permissionId, $perms);
}
This pivot has been previously created with:
public function attachPermission($id)
{
$permissionId = Input::get('id');
$permissionValue = Input::get('value');
$user = User::find($id);
if (!$user->permissions->contains($permissionId)) {
$user->attachPermissionById($permissionId);
$perms = ['value' => $permissionValue];
$user->permissions()->updateExistingPivot($permissionId, $perms);
} else {
return Response::json(array('error' => 'Permission ' . $permissionId . ' is alreay set for user ' . $user->id));
}
return Response::json(array('role' => User::with(['roles.permissions', 'permissions', 'students'])->find($user->id)));
}
When the updatePermission() method is hit, it passes fine, but it doesn't update the pivot table with the new value. What am I doing wrong here?
回答1:
I won't tell you why it doesn't work, but I suggest you do this:
public function attachPermission($id)
{
$permissionId = Input::get('id');
$value = Input::get('value');
$user = User::find($id);
$sync = $user->permissions()->sync([$permissionId => compact('value')], false);
return (in_array($permissionId, $sync['updated']))
? Response::json(...) // permission updated
: Response::json(...); // permission added
}
It will add or update new permission for you.
来源:https://stackoverflow.com/questions/28407596/updateexistingpivot-not-working