【问题标题】:codeigniter active record join 2 databasescodeigniter 活动记录加入 2 个数据库
【发布时间】:2013-09-17 19:21:54
【问题描述】:

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

$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

我实际拥有的。

请帮忙。谢谢。

【问题讨论】:

    标签: codeigniter activerecord join


    【解决方案1】:

    你不能。如果您查看 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() 时,传递第四个参数 FALSE,以关闭 ON

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

    【讨论】:

    • 感谢您的快速回复,我已经尝试过了,但问题是我有多个联接(12),这就是我想使用活动记录的原因。我可以以某种方式首先使用活动记录,然后将其与 SQL 结合起来,然后再次添加一些活动记录语句吗?
    • 您使用的是什么版本的 CI?
    • 我的 CI 版本是 2.1.3
    猜你喜欢
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多