【问题标题】:updateExistingPivot() not workingupdateExistingPivot() 不工作
【发布时间】:2015-02-09 10:27:39
【问题描述】:

我正在尝试像这样更新数据透视表:

public function updatePermission($id, $permissionId)
{
    $permissionValue = Input::get('value');
    $user = User::find($id);

    $perms = ['value' => $permissionValue];
    $user->permissions()->updateExistingPivot($permissionId, $perms);
}

此数据透视表之前已使用:

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)));
}

当 updatePermission() 方法被命中时,它可以正常通过,但它不会用新值更新数据透视表。我在这里做错了什么?

【问题讨论】:

  • 你有没有让 updateExistingPivot 工作?

标签: laravel laravel-4 eloquent


【解决方案1】:

我不会告诉你为什么它不起作用,但我建议你这样做:

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
}

它将为您添加或更新新权限。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-24
    • 2021-02-13
    • 2016-08-10
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    相关资源
    最近更新 更多