Laravel项目中表单Checkbox多选数据无法存入数据库问题求助
问题原因
- 核心错误是控制器中
$request->has()的参数名写错:前端name="allergy[]"是声明提交数组类型的参数,后端接收时参数名是allergy,不需要带[],所以原判断if($request->has('allergy[]'))永远为假,拼接逻辑从来没执行过。 - 次要排查点:检查
Product模型的$fillable属性是否加入了allergy字段,虽然直接属性赋值不受批量赋值限制,但如果配置了$guarded = []之外的限制也可能导致字段写入失败。
修正代码
修正后的ProductController.php
public function store(ProductRequest $request) { $product = new Product; $product->user_id = $request->user()->id; $product->name = $request->name; // 修正参数名,同时兼容用户不选任何选项的情况 if($request->has('allergy')) { $allergy = $request->allergy; $string = implode(",", $allergy); $product->allergy = $string; } $product->save(); return redirect('product/create')->with('message', 'Your answer has been uploaded.'); }
可选补充:表单保留旧选中值
如果需要提交失败后保留用户之前选中的复选框状态,可以修改前端checkbox代码:
<input type="checkbox" name="allergy[]" value="1" {{ in_array(1, old('allergy', [])) ? 'checked' : '' }}> apple <input type="checkbox" name="allergy[]" value="2" {{ in_array(2, old('allergy', [])) ? 'checked' : '' }}> orange <input type="checkbox" name="allergy[]" value="3" {{ in_array(3, old('allergy', [])) ? 'checked' : '' }}> banana
验证方法
可以在控制器store方法开头加dd($request->all()),提交表单后查看返回的参数结构,就能确认多选值是以allergy为键的数组存在的。
内容的提问来源于stack exchange,提问作者toyop
相关产品推荐
相关产品推荐

