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

Laravel控制器中如何获取所有以category_id开头的输入值?

问题原因与解决方案

为什么$request->input('category_id.*')无效?

Laravel的*通配符只适配数组格式的请求参数(比如name="category_id[]"),但你现在的表单字段命名是category_id1、category_id2这种带数字后缀的格式,不属于数组参数范畴,所以通配符匹配不到,自然返回null。

解决方案1:改用数组格式命名(推荐)

把所有选择框的name属性改成category_id[],提交后Laravel会自动将这些值解析成数组:

<select id="category_select1" class="form-control" name="category_id[]">
     @foreach($category as $c)
          <option value="{{$c->id}}">{{$c->name}}</option>
     @endforeach
</select>

<select id="category_select2" class="form-control" name="category_id[]">
     @foreach($category2 as $c)
          <option value="{{$c->id}}">{{$c->name}}</option>
     @endforeach
</select>

之后直接用下面的代码就能获取所有选择值:

$categoryIds = $request->input('category_id');
// 返回结果示例:[2, 5]

解决方案2:保留原命名,手动筛选参数

如果没法修改前端表单,可以遍历请求的所有参数,筛选出名称以category_id开头的字段:

$categoryIds = [];
foreach ($request->all() as $key => $value) {
    if (str_starts_with($key, 'category_id')) {
        $categoryIds[] = $value;
    }
}
// $categoryIds 就是所有符合条件的选择框值组成的数组

用集合操作可以更简洁:

$categoryIds = collect($request->all())
    ->filter(fn($value, $key) => str_starts_with($key, 'category_id'))
    ->values()
    ->toArray();

内容的提问来源于stack exchange,提问作者Elif Bahar Özdoğru

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 16:12:45