我可以使用$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
我实际拥有的东西。
请帮忙。谢谢。
答案 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)中,情况仍然如此,但会使用ON
或USING()
。
您最好的选择是使用$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);