codeigniter活动记录加入2个数据库

时间:2013-09-17 19:21:55

标签: codeigniter activerecord join

我可以使用$this->db->join('database.table')而不插入此功能的第二个参数吗?我需要连接2个数据库,但它们没有任何绑定它们的东西。我知道它适用于SQL,因为我已经尝试过,但是我想使用活动记录更改模型,因为我发现它更灵活等等。但我不知道如何插入连接 < / p>

$this->db->select('users.user_id');
$this->db->distinct();
$this->db->from('users');
$this->db->join('user_detail', 'users.user_id = user_detail.id', 'left');

现在类似于:

$this->db->join('cities.city');

所以SQL应该是这样的:

SELECT DISTINCT users.user_id FROM users LEFT JOIN .... JOIN cities.city

而不是:

SELECT DISTINCT users.user_id FROM users LEFT JOIN .... JOIN cities.city ON

我实际拥有的东西。

请帮忙。谢谢。

1 个答案:

答案 0 :(得分:3)

你做不到。如果查看CI核心文件,您将看到始终传递ON。在检查系统文件之前,我没有意识到这种情况。

$join = $type.'JOIN '.$this->_protect_identifiers($table, TRUE, NULL, FALSE).' ON '.$cond;

/system/database/DB_active_rec.php行中的引用340.即使在latest version (GitHub)中,情况仍然如此,但会使用ONUSING()

您最好的选择是使用$this->db->query()

$this->db->query('SELECT DISTINCT users.user_id FROM users LEFT JOIN .... JOIN cities.city');

更新:由于您使用的是2.1.3,因此您可以破解核心文件(因为我认为没有办法扩展CI活动记录)。虽然您不应该在正常情况下编辑核心文件,但至少这将为您提供所需的内容。打开/system/database/DB_active_rec.php

将第310行更改为:

public function join($table, $cond, $type = '', $use_on = TRUE)

将第340行更改为(现在变为2行):

$on_cond = ($use_on === TRUE) ? ' ON '.$cond : NULL;
$join = $type.'JOIN '.$this->_protect_identifiers($table, TRUE, NULL, FALSE).$on_cond;

现在,在您的模型中,当您致电join()传递第4个参数FALSE时,请关闭ON

$this->db->join('cities.city', NULL, '', FALSE);