Codeigniter活动记录左连接问题

时间:2013-11-20 18:21:24

标签: php mysql codeigniter activerecord left-join

我有两个表'accounts_transactions'和'accounts_bills_transactions'。 我必须使用codeigniter的活动记录来连接这两个。但是用于连接的键列的名称是不同的。所以我没有从输出中的左表中获取键列。我应该写什么查询来获取键结果中包含左表中的列。 我的代码是

    $this->db->select('*');
    $this->db->from('accounts_transactions');
    $this->db->join('accounts_bills_transactions', 'accounts_transactions.id = accounts_bills_transactions.transaction_id','left');
    $query = $this->db->get();

因此,正如您所看到的那样,用于连接的键列是左表中的id和第二个表中的transaction_id。问题是我没有从结果中的左表中获取id。但我得到了所有其他我认为问题是因为用于连接的列名不同。列名都没有命名为'id'。那么如何从结果中包含的左表中获取id。

3 个答案:

答案 0 :(得分:5)

您可以为它们添加别名:

$this->db->select('accounts_transatctions.*, account_transactions.id AS a_id,
                   accounts_bills_transactions.*, 
                   account_bills_transactions.id AS ab_id');
$this->db->from('accounts_transactions');
$this->db->join('accounts_bills_transactions', 'accounts_transactions.id = accounts_transactions.transaction_id','left');
$query = $this->db->get();

这两个ID现在可用a_idab_id(或您选择的任何别名)

注意:我不确定您是否可以在AR中使用别名而不会避免转义(暂时没有使用CI)。如果您因此出现任何错误,请将false作为$this->db->select()的第二个参数传递:

$this->db->select('...', false);

答案 1 :(得分:3)

如果您混淆使用$ this-> where或$ this-> join

,您可以试试这个
$query = $this->db->query("select ......"); 

return $query;

答案 2 :(得分:1)

你的问题很简单。您可以使用此查询

$query  =   $this->db
                ->select('at.*')
                ->select('abt.id as abt_id');
                ->from('accounts_transactions at');
                ->join('accounts_bills_transactions abt', 'at.id = abt.transaction_id','left');
                ->get()
                ->result();

当在连接中使用相同的列时,它只选择一个。您需要将alise赋予第二个表中的其他列。最佳做法是使用这样的结构

accounts_transatctions
--------------------------
accounts_transatctions_id
other_columns

accounts_bills_transactions
---------------------------
accounts_bills_transactions_id
accounts_transatctions_id
other_columns