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

Laravel项目勾选switch按钮提交后状态未更新问题咨询

问题根因

你遇到的字段不更新的问题主要由以下几个常见原因导致:

  • 复选框的特性:浏览器默认不会提交未勾选的复选框字段,当你取消switch选中状态时,后端请求参数里根本没有cas_suivi字段,批量更新时就会跳过这个字段的修改
  • 批量赋值过滤:如果cas_suivi没有加到Patient模型的$fillable属性里,或者没有加到表单请求UpdatePatientRequest的允许字段列表中,会被Laravel的批量赋值保护机制直接过滤
  • 复选框配置错误:你没有给复选框设置value属性,默认提交的值为on,如果和你数据库存储的预期值不匹配,就会导致更新失败;同时你的代码里重复写了type="checkbox"属性,也可能存在潜在的渲染异常
  • 状态判断逻辑错误:你当前选中状态的判断条件是$patient->cas_suivi == "cas_suivi",如果数据库存储的不是字符串cas_suivi(比如存的是布尔值1/0),这个判断逻辑完全不生效
  • 控制器返回逻辑错误:更新后直接返回视图,会导致页面刷新时重复提交表单,也可能出现旧数据渲染的问题

修复方案

1. 修正前端代码

增加同name的隐藏输入框,用来传递未勾选时的默认值,删除重复的type属性,给复选框设置正确的value,同时根据你的存储值调整状态判断逻辑:

注意:隐藏输入框要放在复选框前面,这样复选框勾选时提交的值会覆盖隐藏框的默认值

<div class="col-4 text-left">
     <form  id="form" class="was-validated" method="POST" action="{{ route("admin.patients.update", [$patient->id]) }}" enctype="multipart/form-data">
     @method('PUT')
     @csrf
         <div style="float: right">
              <label class="switch">
                  <!-- 未勾选时默认传0,可根据你的业务需求调整默认值 -->
                  <input type="hidden" name="cas_suivi" value="0">
                  <!-- 此处value根据你数据库存储的选中值调整,下面是两种常见场景 -->
                  <!-- 场景1:数据库存布尔值1代表选中 -->
                  <input type="checkbox" onchange="$('#form').submit();" name="cas_suivi" id="cas_suivi" value="1" {{ $patient->cas_suivi ? ' checked' : '' }} >
                  <!-- 场景2:数据库存字符串cas_suivi代表选中,就用下面这行替换上面的复选框代码 -->
                  <!-- <input type="checkbox" onchange="$('#form').submit();" name="cas_suivi" id="cas_suivi" value="cas_suivi" {{ $patient->cas_suivi == 'cas_suivi' ? ' checked' : '' }} > -->
                      <div class="slider"></div>
              </label>
          </div>
       </form>
     </div>

2. 配置批量赋值权限

  • 打开app/Models/Patient.php,确认cas_suivi在$fillable数组中:
protected $fillable = [
    // 其他已配置的可填充字段
    'cas_suivi',
];
  • 打开app/Http/Requests/UpdatePatientRequest.php,确认cas_suivi在验证规则列表中:
public function rules()
{
    return [
        // 其他已配置的验证规则
        'cas_suivi' => 'required|boolean', // 如果是存字符串就把规则改成required|string|in:cas_suivi,其他值
    ];
}

3. 修正控制器逻辑

更新完成后用重定向跳转回详情页,避免刷新页面重复提交表单:

public function update(UpdatePatientRequest $request, Patient $patient) 
{ 
    $patient->update($request->all()); 
    return redirect()->route('admin.patients.show', $patient)->with('success', 'Le patient a bien été modifié'); 
}

内容的提问来源于stack exchange,提问作者Saliou MBALO

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:45:03