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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 14:57:17