Laravel 8中如何将已勾选及未勾选复选框值存入数据库
解决方案
要实现同时保存已勾选和未勾选复选框的状态到数据库,需要从前端表单处理和后端逻辑调整两方面入手:
1. 前端表单修改
HTML表单默认仅提交勾选状态的复选框,因此需要为每个复选框添加一个同名的隐藏输入框,用于提交未勾选状态的值:
@foreach ($scoreEvaluations as $scoreEvaluation) <div class="col-sm-2"> <div class="form-group"> <div class="form-check"> <!-- 隐藏输入框:未勾选时提交值为0 --> <input type="hidden" name="score_evaluation_id-{{ $scoreEvaluation->id }}" value="0"> <input class="form-check-input score" type="checkbox" name="score_evaluation_id-{{ $scoreEvaluation->id }}" value="{{ $scoreEvaluation->marks }}" id="score_evaluation_id-{{ $scoreEvaluation->id }}" onclick="score_check(this)" {{ $scoreEvaluation->default_checked ? 'checked' : '' }}> <!-- 动态设置默认勾选状态(建议从数据库字段读取) --> <label class="form-check-label"> {{ $scoreEvaluation->name }} </label> </div> </div> </div> @endforeach
说明:
- 同名的隐藏输入框和复选框,浏览器会优先提交复选框的值(若勾选),否则提交隐藏输入框的
0; - 将硬编码的
checked改为动态判断(假设你的score_evaluations表有default_checked字段),更贴合业务需求。
2. 后端逻辑调整
不再仅遍历请求中的提交参数,而是直接获取所有评估项,逐个判断状态并写入数据库:
use App\Models\ScoreEvaluation; // 确保引入ScoreEvaluation模型 public function store(QCFeedbackRequest $request, QCFeedback $feedback) { $feedback = $feedback->create($request->all()); $this->addScoreResponse($request, $feedback); Session::flash('success', 'Feedback added successfully!'); return redirect()->route('qc-feedback-audits.index'); } public function addScoreResponse($request, $feedback) { // 获取所有质量管理评估项 $allEvaluations = ScoreEvaluation::all(); foreach ($allEvaluations as $evaluation) { $inputKey = "score_evaluation_id-{$evaluation->id}"; // 判断当前评估项是否被勾选 $isChecked = $request->input($inputKey) != '0'; // 写入/更新响应记录(避免重复插入) ScoreEvaluationResponse::updateOrCreate( [ 'qc_feedback_id' => $feedback->id, 'score_evaluation_id' => $evaluation->id ], [ 'checkbox_status' => $isChecked ? 'Checked' : 'Unchecked', // 可选:若需要保存分数,添加以下字段 // 'marks' => $isChecked ? $evaluation->marks : 0 ] ); } }
说明:
- 使用
updateOrCreate方法,既支持首次提交创建记录,也支持后续编辑场景更新记录; - 直接遍历所有评估项,确保不会遗漏任何一个复选框的状态,避免前端异常导致的数据缺失;
- 通过对比请求值是否为
0,判断复选框的勾选状态。
内容的提问来源于stack exchange,提问作者Bilal Ahmed
相关产品推荐
相关产品推荐

