1

我可以在$this->db->join('database.table')不插入此函数的第二个参数的情况下使用 a 吗?我需要连接 2 个数据库,但它们没有任何绑定它们的东西。我知道它可以与 SQL 一起使用,因为我已经尝试过了,但是我想使用活动记录来更改模型,因为我发现它更灵活等等。但我不知道如何插入连接

$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

我实际上有什么。

请帮忙。谢谢你。

4

1 回答 1

3

你不能。如果您查看 CI 核心文件,您会发现它ON总是会通过。直到我检查了系统文件,我才意识到是这种情况。

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

参考/system/database/DB_active_rec.php第 340 行。即使在最新版本(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);
于 2013-09-17T19:31:30.760 回答