2017-07-14 54 views
1

这是我的数据表模型,它结合了我需要的所有表,并且控制台在VehicleNo不明确的代码中发现了一个错误。DataTable模型错误

enter image description here

我还需要通过ApplicationNo和独特的ApplicationNo命令,这样它不会重复其他表

private function _get_datatables_query(){  
if($this->input->post('Status')) 
{               
    $this->db->where('Status', $this->input->post('Status')); 
} 
$this->db->select('*'); 
//$this->db->distinct('ApplicationNo'); 
$this->db->from($this->table); 
$this->db->distinct(); 
$this->db->join('user', 'user.userId = loanapplication.userId');; 
$this->db->join('collateraldetails', 'collateraldetails.ApplicationNo = loanapplication.ApplicationNo'); 
$this->db->join('vehicleinformation', 'vehicleinformation.VehicleNo = collateraldetails.VehicleNo'); 
$this->db->join('loanrequest', 'loanrequest.ApplicationNo = loanapplication.ApplicationNo'); 
$this->db->join('loanapproval', 'loanapproval.RequestNo = loanrequest.RequestNo'); 
$this->db->join('paymentdetails', 'paymentdetails.ApplicationNo = loanapplication.ApplicationNo'); 
$this->db->join('loanpayment', 'loanpayment.PaymentId = paymentdetails.PaymentId'); 
//echo $this->db->last_query();exit; 

$i = 0; 

foreach ($this->column_search as $item) // loop column 
{ 
    if($_POST['search']['value']) // if datatable send POST for search 
    {  
     if($i===0) // first loop 
     { 
      // open bracket. query Where with OR clause better with bracket. because maybe can combine with other WHERE with AND. 
      $this->db->group_start(); 
      $this->db->like($item, $_POST['search']['value']); 
     } 
     else 
     { 

      $this->db->or_like($item, $_POST['search']['value']); 
     } 

     if(count($this->column_search) - 1 == $i) //last loop 
      $this->db->group_end(); //close bracket 
    } 
    $i++; 
} 

if(isset($_POST['ApplicationNo'])) // here order processing 
{ 
    $this->db->order_by($this->column_order[$_POST['ApplicationNo']['0']['column']], $_POST['ApplicationNo']['0']['dir']); 
} 
else if(isset($this->ApplicationNo)) 
{ 

    $ApplicationNo = $this->ApplicationNo; 
    $this->db->order_by(key($ApplicationNo), $ApplicationNo[key($ApplicationNo)]); 
}} 
+0

可能重复[PHP&MYSQL:如何解决JOIN操作中不明确的列名?](https://stackoverflow.com/questions/431391/php-mysql-how-to-resolve-ambiguous-column-names -in-join-operation) – cwallenpoole

+3

消息告诉你错误在WHERE子句中。含糊不清的含义是指找到一个名为'VehicleNo'的列的多个引用(在连接的所有表中),并且您需要专门引用您想要的。要做到这一点,只需添加你需要的表格:\'table \'。\'VehicleNo \' –

回答

1

您在多个表中有列VehicleNo。你加入了它,并没有指定从哪个表中列出VehicleNo,在哪里使用条件。那是你得到这个错误。

你需要指定像vehicleinformationVehicleNo。另外,你应该使用表别名,这是一个好习惯。

+0

我认为这个问题是dataTable已经预先规定了VehicleNo where子句。 $这 - > DB-> group_start(); $ this-> db-> like($ item,$ _POST ['search'] ['value']); –

+1

你应该围绕'foreach($ this-> column_search as $ item)'行。您应该为$ item使用密钥对值或多维数组。基本的想法是从哪个表中指定$ item。例如:如果您使用的密钥对值格式比'foreach($ this-> column_search为$ table => $ item)'和这行'$ this-> db-> like($ item,$ _POST ['search '] ['value']);'会是'$ this-> db-> like($ table。$ item,$ _POST ['search'] ['value']);' –

1

这是不明确的,因为它是你所指的混淆,在表中使用别名。