首页 > 解决方案 > 如何解决违反完整性约束的问题:where 子句中的 1052 列“agent_id”不明确

问题描述

完整性约束违规:1052 列 'agent_id' 在 where 子句不明确

我已经尝试但仍然找不到这个数据表的错误

public function customerOrderList(Request $request, $agent_id){
    $customer_orders = CustomerOrder::join('agent as a', 'a.agent_id','=','customer_order.agent_id')
    ->select('customer_order.*', 'a.name as agent_name')
    ->where('agent_id', $agent_id)
    ->get();

    $datatables = DataTables::of($customer_orders)
    ->addColumn('actions', function($customer_order){
      $html ='';
      $view = route('customer-order.invoice', $customer_order->doc_id);
      $html .= "<a class='btn btn-primary btn-sm' href='$view'><i class='far fa-fw fa-eye'></i></a>";

      return $html;
    })
    ->rawColumns(['actions']);

    return $datatables->make(true);
  }

- 显示数据表

标签: laraveldatatable

解决方案


这意味着您的查询中的多个表具有相同的agent_id列,您的查询无法确定使用哪一个。您'customer_order.agent_id'在一个子句中使用过,但只'agent_id'在另一个子句中使用过。

使用时->join(),有时需要尽可能具体地引用您的引用(取决于您选择的表结构/列等):

$customer_orders = CustomerOrder::join('agent as a', 'a.agent_id','=','customer_order.agent_id')
  ->select('customer_order.*', 'a.name as agent_name')
  ->where('customer_order.agent_id', $agent_id) // Here, add table name before `agent_id`, likely `customer_order`
  ->get();

推荐阅读