【问题标题】:Retrieve empty submitted input data in Laravel在 Laravel 中检索空提交的输入数据
【发布时间】:2018-07-11 15:18:07
【问题描述】:

我正在尝试使用通过经典表单提交的数据,使用 PUT/POST 方法更新我的 laravel 应用程序中的指定资源:

Model::find($id)->update($request->all());

这很好用,除了我提交带有空输入的表单的情况。然后我的请求中将包含除空输入数据之外的所有值,因此更新过程尚未完成。

我知道我可以检查每个请求参数是否存在,如果不存在,则为它分配一个 NULL 值,但我试图避免这种情况,我想知道 Laravel 是否检索到可以通过 Request 访问的空数据。

【问题讨论】:

标签: laravel input request nullable


【解决方案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'
];

【讨论】:

  • $result = array_filter($request->all()) 会更容易。
  • 是的!如果模型不包含名为“_token”的列,否则将是一个严重的问题:p
  • 为什么我什至没有得到空值时要删除它们?我不想删除空值,我只想通过 $request 访问空值,就像非空值一样!
【解决方案2】:

检查 array_filter(request()->all())。 即

模型::find($id)->update(request()->all()):

【讨论】:

    【解决方案3】:

    而不是使用 request->all() 使用后备显式设置字段。 就像是: Model::find($id)->update([ 'this' => $request->this ?? '', 'that' => $request->that ?? '', ]);

    有点麻烦,但它会完成工作。

    【讨论】:

      猜你喜欢
      • 2014-08-05
      • 2019-03-28
      • 1970-01-01
      • 1970-01-01
      • 2011-08-18
      • 1970-01-01
      • 2012-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多