You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Request如何获取所有已填充的字段值?

当然可以!不用再写重复的判断啦

Laravel 早就为你想到了这个场景,完全可以一次性获取所有**已填充(存在且非空)**的字段值,省去一堆重复的if判断。下面给你两种常用的实现方式,按需选择:

方式一:获取所有输入中的已填充字段

如果你想接收所有用户输入里的非空字段,可以借助 Laravel 的集合和filled()辅助函数来过滤:

// 把请求数据转成集合,过滤掉空值后转回数组
$filledFields = collect($request->all())
    ->filter(fn($value) => filled($value))
    ->toArray();

// 直接批量赋值给模型(记得确保模型的$fillable包含这些字段!)
$item->fill($filledFields);
$item->save();

这里的filled($value)和$request->filled($field)逻辑完全一致:会排除null、空字符串""、空数组[]这类无效值,只保留真正有内容的字段。

方式二:仅获取指定字段中的已填充项(更安全)

如果你的模型只允许特定字段被赋值(推荐这种方式,防止批量赋值漏洞),可以先定义允许的字段列表,再筛选其中已填充的:

// 定义模型允许接收的字段
$allowedFields = ['type', 'title', 'description', 'status'];

// 筛选出这些字段中已填充的项
$filledFields = collect($allowedFields)
    ->filter(fn($field) => $request->filled($field))
    ->mapWithKeys(fn($field) => [$field => $request->input($field)])
    ->toArray();

// 批量赋值并保存
$item->fill($filledFields)->save();

这种方式更严谨,能避免意外接收用户传入的非法字段,让代码更安全。

注意事项

  • 不管用哪种方式,都要确保你的模型已经正确设置了$fillable属性(列出允许批量赋值的字段),或者设置$guarded = [](不推荐,风险较高),否则fill()方法会忽略这些字段。
  • filled()和has()的区别:has()只判断字段是否存在(哪怕是空值),而filled()会同时判断字段存在且有有效内容,这正是你需要的场景。

内容的提问来源于stack exchange,提问作者Sunny Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 08:12:27