Laravel仅在不为null时才更新

时间:2017-04-26 10:52:36

标签: php laravel

有没有办法将以下代码压缩成一个update()?:

    $this->validate(request(), [
        'name' => 'required|string|max:255',
        'email' => 'required|string|email|max:255|unique:users,email,'.$id,
        'password' => 'nullable|string|min:6|confirmed',
        'timezone' => 'required|timezone',
    ]);

    $user = User::findOrFail($id);
    $user->update(request()->all());
    if (!empty(request()->input('password'))) {
        $user->update(['password' => bcrypt(request()->input('password'))]);
    }

我想摆脱更新密码的条件语句,因为我现在自动使用mutator bcrypt。有没有类似request()->allNotNull()的方法?

2 个答案:

答案 0 :(得分:9)

你可以这样做:

$user = User::where('id', $id)->update(request()->all());

也许您还想添加->take(1)

<强>更新

在评论中你说你想要摆脱空白的领域。使用array_filter()

array_filter($request->all());
  

如果未提供回调,则将删除等于false的所有数组条目。

答案 1 :(得分:1)

你可以试试这个。如果密码为空,将过滤掉密码。

$input = collect(request()->all())->filter()->all();

$user = User::where('id', $id)->update($input);