Codeigniter 和 Firebird $this->db->join with Lower support

Codeigniter and Firebird $this->db->join with Lower support

这就是我使用 Codeigniter 从 Firebird 数据库获取记录的方法:

$columns = [
            'job.JOBID AS Id', 'job.ORDERID AS orderID', 'suburb.LONGITUDE AS Longitude', 'suburb.LATITUDE AS Latitude', 'suburb.LCNAME', 'address.TOWN', ];
        $this->db->select($columns);
        $this->db->from('WORK as job');
        $this->db->join('CUSTOMER AS customer', 'customer.CUSTOMERID = job.CUSOMERTID', 'INNER');
        $this->db->join('SALEORDER AS sorder', 'sorder.ORDERID = job.ORDERID', 'INNER');
        $this->db->join('CUSTADDRESS AS address', 'address.ADDRID = sorder.DELADDRID', 'INNER');        
        $this->db->join('WORK2 AS job2', 'job2.JOBID = job.JOBID', 'LEFT');

        // THE BELOW LINE CAUSE ERROR DUE TO LOWER
        $this->db->join('SUBURBS AS suburb', 'suburb.LCNAME = LOWER(address.TOWN)', 'LEFT');

        $query = $this->db->get();

代码在没有 LOWER 的情况下工作正常,并且相关的 JOIN 在没有它的情况下无法工作,因为条件为假。我已经说过,suburb.LCNAME = 'blacktown'address.Town = BlackTown

我收到以下错误消息,

A PHP Error was encountered
Severity: Warning
Message: ibase_query(): Dynamic SQL Error SQL error code = -206 Column unknown ADDRESS.TOWN At line 12, column 1
Filename: ibase/ibase_driver.php
Line Number: 129

试试这个

$this->db->select($columns.',LOWER(address.Town) as lower_address');
 $this->db->from('WORK as job');
 $this->db->join('CUSTOMER AS customer', 'customer.CUSTOMERID = job.CUSOMERTID', 'INNER');
 $this->db->join('SALERDER AS sorder', 'sorder.ORDERID = job.ORDERID', 'INNER');
 $this->db->join('CUSTADDRESS AS address', 'address.ADDRID = sorder.DELADDRID', 'INNER');        
 $this->db->join('WORK2 AS job2', 'job2.JOBID = job.JOBID', 'LEFT');

 // THE BELOW LINE CAUSE ERROR DUE TO LOWER
 $this->db->join('SUBURBS AS suburb', 'suburb.LCNAME = lower_address', 'LEFT');

 $query = $this->db->get();

删除别名地址并使用以下行以及您的代码中的原始 table 名称。 $this->db->join('CUSTADDRESS AS address', 'address.ADDRID = sorder.DELADDRID', 'INNER');

改用: $this->db->join('CUSTADDRESS', 'CUSTADDRESS.ADDRID = sorder.DELADDRID', 'INNER');