Laravel能否在同一控制器方法中同时处理AJAX提交的新增与更新操作?
实现方案
完全可以在同一个控制器方法内同时处理新增和更新逻辑,无需拆分方法,具体调整如下:
调整思路
核心逻辑是根据提交的主键Group_Id判断操作类型:
- 如果请求中携带的
Group_Id在数据库中存在匹配记录,执行更新操作 - 如果
Group_Id为空/不存在匹配记录,执行新增操作
具体代码修改
首先你需要先确保前端提交表单时,编辑场景下会把当前待修改记录的Group_Id一起通过AJAX传入后端,新增场景下该字段可传空值。
方式1:手动判断实现(可读性更强)
function () { if ($request->ajax()) { $data = $request->input(); // 注意原代码这里漏了分号,需要补上 // 先查询是否有对应记录 $organisationGroup = OrgrpOrganisationGroup::query() ->where('ORGRPID', $data['Group_Id']) ->first(); // 没有查询到就新建实例 if (!$organisationGroup) { $organisationGroup = new OrgrpOrganisationGroup; $organisationGroup->ORGRPID = $data['Group_Id']; } // 公共字段赋值 $organisationGroup->ORGRPCode = $data['Group_Code']; $organisationGroup->ORGRPName = $data['Group_Name']; $organisationGroup->MSCONID = $data['Country']; $organisationGroup->MSCSTID = $data['State']; $organisationGroup->MSCCYID = $data['City']; $organisationGroup->MSCURID = $data['Currency']; $organisationGroup->save(); // 后续可以加返回响应的逻辑 } }
方式2:使用Laravel内置updateOrCreate方法(代码更简洁)
function () { if ($request->ajax()) { $data = $request->input(); OrgrpOrganisationGroup::updateOrCreate( ['ORGRPID' => $data['Group_Id']], // 匹配条件 [ // 要更新/新增的字段 'ORGRPCode' => $data['Group_Code'], 'ORGRPName' => $data['Group_Name'], 'MSCONID' => $data['Country'], 'MSCSTID' => $data['State'], 'MSCCYID' => $data['City'], 'MSCURID' => $data['Currency'], ] ); } }
注意:如果使用
updateOrCreate方法,需要先将上面赋值的所有字段加入OrgrpOrganisationGroup模型的$fillable属性中,避免批量赋值报错。
内容的提问来源于stack exchange,提问作者rahul krishna
相关产品推荐
相关产品推荐

