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
相关产品推荐
相关产品推荐

