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

Laravel-5.8:未勾选is_current复选框仍更新其他记录状态问题

解决Laravel 5.8中AppraisalIdentity的is_current批量更新逻辑问题

我来帮你搞定这个问题,核心就是给批量更新的逻辑加个条件判断——只有当用户勾选了is_current复选框时,才去把其他记录的is_current设为0。

修改后的Store方法

原来的代码不管是否勾选is_current都会执行批量更新,现在我们把那行代码放到if判断里,仅当请求中存在is_current参数(也就是用户勾选了复选框)时才执行:

public function store(StoreAppraisalIdentityRequest $request) { 
    // 补上Carbon解析(根据你的update方法逻辑补充)
    $appraisalStart = Carbon::parse($request->appraisal_start);
    $appraisalEnd = Carbon::parse($request->appraisal_end);
    
    $identity = AppraisalIdentity::create([ 
        'appraisal_name' => $request->appraisal_name, 
        'appraisal_start' => $appraisalStart, 
        'appraisal_end' => $appraisalEnd, 
        'is_current' => $request->has('is_current'), 
    ]); 

    // 关键修改:只有勾选is_current时才更新其他记录
    if ($request->has('is_current')) {
        AppraisalIdentity::where('id', '!=', $identity->id)->update(['is_current' => 0]);
    }

    Session::flash('success', 'Appraisal Initialization is created successfully'); 
    return redirect()->route('appraisal.appraisal_identities.index'); 
}

修改后的Update方法

同样的逻辑,在更新记录后,判断用户是否勾选了is_current,再决定是否执行批量更新:

public function update(UpdateAppraisalIdentityRequest $request, $id) { 
    abort_unless(\Gate::allows('appraisal_identity_edit'), 403); 
    $appraisalStart = Carbon::parse($request->appraisal_start); 
    $appraisalEnd = Carbon::parse($request->appraisal_end); 
    $submissionStart = Carbon::parse($request->submission_start); 
    $submissionEnd = Carbon::parse($request->submission_end); 

    $identity = AppraisalIdentity::find($id); 
    $identity->appraisal_name = $request->appraisal_name; 
    $identity->appraisal_start = $appraisalStart; 
    $identity->appraisal_end = $appraisalEnd; 
    // 先把勾选状态存到变量里,方便后续判断
    $isCurrentChecked = $request->has('is_current');
    $identity->is_current = $isCurrentChecked; 
    $identity->save(); 

    // 关键修改:仅勾选时批量更新其他记录
    if ($isCurrentChecked) {
        AppraisalIdentity::where('id', '!=', $id)->update(['is_current' => 0]);
    }

    Session::flash('success', 'Appraisal Initialization is updated successfully'); 
    return redirect()->route('appraisal.appraisal_identities.index'); 
}

逻辑说明

  • $request->has('is_current')会返回布尔值:如果用户勾选了复选框,这个参数会出现在请求中,返回true;反之返回false。
  • 只有当返回true时,我们才执行批量更新代码,把其他所有记录的is_current设为0。
  • 如果用户没勾选,这行批量更新的代码就不会执行,其他记录的is_current状态保持不变,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:07:33