首页 > 解决方案 > 使用 Laravel 请求在更新方法上传递空字段

问题描述

我通过经典提交的表单获取数据,但由于某种原因,我没有在请求中获取所有输入数据,它只更新收到的数据。

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

这有点问题,因为我的数据库中有多个可为空的字段,有时我想传递空字段(即当用户清除输入然后提交表单时)

您是否也知道将空字段传递给请求的方法?

标签: laravelformsinputrequestsubmit

解决方案


问题是,Laravel默认通过ConvertEmptyStringsToNull中间件将''值转换为。检查你的内核:null

应用程序/Http/Kernel.php

protected $middleware = [
    // ...
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    // ...
];

该中间件执行以下操作:

protected function transform($key, $value)
{
    return is_string($value) && $value === '' ? null : $value;
}

如您所见,如果给定属性有一个值'',它将被转换为null.

因此,为避免这种情况,您只需在内核文件中注释该中间件即可。但请注意这一点,因为这将应用于您的整个应用程序。


推荐阅读