我正在尝试使用通过PUT / POST方法通过经典形式提交的数据来更新laravel应用程序中的指定资源:
Model::find($id)->update($request->all());
这很好,除了我提交带有空输入的表单的情况。然后,我将在请求中拥有除空输入数据之外的所有值,因此更新过程不完整。
我知道我可以检查每个请求参数是否存在,如果不存在,请为它分配一个NULL值,但是我试图避免这种情况,我想知道Laravel是否检索到可以通过Request访问的空数据。
答案 0 :(得分:1)
//remove the _token from the request
$data = request()->except(['_token']);
// then with array_filter remove empty array values from $data
$result = array_filter($data);
//finally update your record
Model::find($id)->update($result)
编辑:
您想保留所有字段,甚至是空字段吗?
在您的请求中添加规则,如果您不希望验证程序将空值视为无效,则将“可选”请求字段标记为可空,这是规则的示例:
public static $rules = [
'first_name' => 'nullable|string',
'last_name' => 'nullable|string'
];
答案 1 :(得分:0)
使用array_filter(request()-> all())检查。 即
Model :: find($ id)-> update(request()-> all()):
答案 2 :(得分:0)
代替使用request-> all()显式地设置字段,并使用一个后备选项。
就像是:
Model::find($id)->update([
'this' => $request->this ?? '',
'that' => $request->that ?? '',
]);
比较麻烦,但是可以完成工作。