Laravel控制器中删除主外键关联表行的问题排查
问题:Laravel中关联表数据删除失败排查
背景
我通过以下查询成功从数据库获取关联表数据:
$matterConveyancing_all_tables = DB::table('matter_conveyancings') ->join('matter_conveyancing_b_s', 'matter_conveyancings.id', '=', 'matter_conveyancing_b_s.matter_conveyancings_id') ->join('matter_conveyancing_c_s', 'matter_conveyancings.id', '=', 'matter_conveyancing_c_s.matter_conveyancings_id') ->join('matter_conveyancing_d_s', 'matter_conveyancings.id', '=', 'matter_conveyancing_d_s.matter_conveyancings_id') ->join('matter_conveyancing_e_s', 'matter_conveyancings.id', '=', 'matter_conveyancing_e_s.matter_conveyancings_id') ->select('matter_conveyancings.*', 'matter_conveyancing_b_s.*', 'matter_conveyancing_c_s.*', 'matter_conveyancing_d_s.*', 'matter_conveyancing_e_s.*') ->get();
第一次尝试:错误的关联条件
尝试用类似写法在Laravel控制器中编写删除关联表数据的destroy方法:
public function destroy(MatterConveyancing $matterConveyancing,$id) { DB::table('matter_conveyancings') ->join('matter_conveyancing_b_s', 'matter_conveyancings.id', '=', 'matter_conveyancing_b_s.'.$id) ->join('matter_conveyancing_c_s', 'matter_conveyancings.id', '=', 'matter_conveyancing_c_s.'.$id) ->join('matter_conveyancing_d_s', 'matter_conveyancings.id', '=', 'matter_conveyancing_d_s.'.$id) ->join('matter_conveyancing_e_s', 'matter_conveyancings.id', '=', 'matter_conveyancing_e_s.'.$id) ->delete(); return response()->json([ 'message'=>"True!" ]); }
执行后出现错误:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'matter_conveyancing_b_s.1' in 'on clause' (SQL: delete `matter_conveyancings` from `matter_conveyancings` inner join `matter_conveyancing_b_s` on `matter_conveyancings`.`id` = `matter_conveyancing_b_s`.`1` inner join `matter_conveyancing_c_s` on `matter_conveyancings`.`id` = `matter_conveyancing_c_s`.`1` inner join `matter_conveyancing_d_s` on `matter_conveyancings`.`id` = `matter_conveyancing_d_s`.`1` inner join `matter_conveyancing_e_s` on `matter_conveyancings`.`id` = `matter_conveyancing_e_s`.`1`)
已确认传入的ID正确,但仍报错。
第二次尝试:添加WHERE条件但数据未删除
修改代码添加WHERE条件:
public function destroy(MatterConveyancing $matterConveyancing,$id) { DB::table('matter_conveyancings') ->join('matter_conveyancing_b_s', 'matter_conveyancings.id', '=', 'matter_conveyancing_b_s.matter_conveyancings_id') ->join('matter_conveyancing_c_s', 'matter_conveyancings.id', '=', 'matter_conveyancing_c_s.matter_conveyancings_id') ->join('matter_conveyancing_d_s', 'matter_conveyancings.id', '=', 'matter_conveyancing_d_s.matter_conveyancings_id') ->join('matter_conveyancing_e_s', 'matter_conveyancings.id', '=', 'matter_conveyancing_e_s.matter_conveyancings_id') ->where('matter_conveyancings.id',$id) ->delete('matter_conveyancings', 'matter_conveyancing_b_s', 'matter_conveyancing_c_s','matter_conveyancing_d_s','matter_conveyancing_e_s'); return response()->json([ 'message'=>'Done!' ]); }
虽然返回成功提示,但数据未被删除。
视图层相关代码
删除方法:
deleteConveyancingMatter(id) { if (confirm("Are you sure to delete this Matter ?")) { this.axios .delete(`/api/auth/matter-conv/${id}`) .then((response) => { this.getConveyMatters(); }) .catch((error) => { console.log(error); }); } },
按钮:
<a style="color: #7367f0" @click="deleteConveyancingMatter(conveymatter.id)" ><i class="fa-solid fa-trash-can"></i ></a>
疑问
请问数据未被删除的问题出在哪里?
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

