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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 17:25:14