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
相关产品推荐
相关产品推荐

