如何使用 Laravel $request->whenHas() 方法?

How to use Laravel $request->whenHas() method?

我正在通过 Laravel 请求对象进行解析,以确定用户是否输入了任何输入,这样我就可以仅使用更新后的值来更新模型。

目前我正在使用:

if (isset($request->$field) && $request->$field != $model->$field) {
     $model->$field = $request->$field;
}

我最近发现了一个 Laravel 请求方法 whenHas 似乎是完成此任务的更有效方法。

我在网络和 Whosebug 上搜索了示例,但只找到了基本结构。我是 OOP 的新手,但我明白这与 closures/callbacks.

有关

仅供参考,在我当前的代码中我有 isset() 函数,因为响应可能包含我正在与模型的相关字段值进行比较的字段的空值(我当前的代码片段在“foreach( $fields 作为 $field) 函数)。

如何使用 whenHas 方法实现此功能?

任何帮助将不胜感激,谢谢!

$request->whenHas($field, function ($value) use ($field, $model) {
    $model->$field = $value;
});

// or PHP 7.4+

$request->whenHas($field, fn ($value) => $model->$field = $value);

如果请求包含该字段,则该输入的值将传递给您的回调。如果该字段不存在,此方法执行 return $request,或者如果它运行它,它将 return $request 或您从回调中 return 的任何内容(该字段存在)。

虽然您可能根本不需要这样做。如果您有特定字段要检查,您可以遍历 $request->only($fields).

我遇到的基本问题是,当用户是 'updating' 他们的模型时,唯一字段的验证将失败。当有一个更简单的解决方案时,我试图通过 'whenHas()' 方法解决这个问题......只需将当前用户的信息添加到验证规则(例如 'email' => 'unique:table,email_column_to_check,id_to_ignore')。