Laravel 8修改Request的courierStatus值后日志显示null的原因查询
Laravel Request属性赋值日志输出异常原因解析
核心原因
- Laravel的
Illuminate\Http\Request对象的动态属性赋值逻辑与序列化输出逻辑是分离的,你遇到的现象是二者机制差异导致的:
- 执行
$request->courierStatus = 10时,仅给Request实例动态挂载了一个公开属性,这个值只存储在对象属性层级,并未写入Request内部维护的原生请求输入参数集合中。 - 调用
Log::debug($request)输出请求对象时,Laravel会自动调用Request的toArray()方法做序列化,该方法仅返回请求原始携带的查询参数、POST参数、上传文件等原生输入内容,不会包含你后续动态挂载到对象上的自定义属性,所以日志中看到的courierStatus还是原始请求的null值。 - 写入数据库时你直接读取
$request->courierStatus,PHP读取对象属性时会优先返回你动态挂载的属性值,所以拿到的是正确的10,入库结果正常。
标准修改请求参数写法
如果需要修改后的参数同步到请求输入集合中,日志也能正常输出修改后的值,请使用Request类提供的merge方法:
public function store(Request $request) { $request->merge(['courierStatus' => 10]); Log::debug($request); }
内容的提问来源于stack exchange,提问作者pasindu chanaka
相关产品推荐
相关产品推荐

