使用codeigniter中的活动记录连接两个数据库

时间:2013-02-14 18:18:18

标签: database codeigniter activerecord join

是否有人知道如何使用codeignitor活动记录从两个不同的数据库连接两个表?

我有这两个数据库实例:

      $this->DB2 = $this->load->database('asterisk', TRUE);
      $this->DB1 = $this->load->database('default', TRUE); 

我想从这两个不同的数据库中加入两个表。我怎么能做到这一点?

如果您有任何文档链接,请给我。

3 个答案:

答案 0 :(得分:0)

您是否尝试为每个数据库添加前缀?我没有权限访问我的本地服务器来测试它,但是如果你对这两个数据库都有权限,那么类似的东西应该可以工作:

$this->db->select('*');
$this->db->from('asterisk.blogs');
$this->db->join('default.comments', 'default.comments.id = asterisk.blogs.id');

答案 1 :(得分:0)

如果您无法加入两个不同的数据库,并且不想使用常规SQL语句 - 您可以尝试使用ActiveRecord缓存来执行此操作。

http://ellislab.com/codeigniter/user-guide/database/active_record.html#caching

某些“伪代码”可能不起作用 - 但可能有助于您入门。

$this->db = $this->load->database('asterisk', TRUE);
$this->db->start_cache();
$this->db->select('*');
$this->db->stop_cache();
$this->db->get('table1');

$this->db = $this->load->database('default', TRUE);
$this->db->select('*');
$this->db->from('table2');
$this->db->join('table1', 'table1.id = table2.id');
$this->db->get();

答案 2 :(得分:0)

在您的模型中调用另一个DB:

function __construct() {
    parent::__construct();
    $this->DB2= $this->load->database('DB2', TRUE);
}

然后只需使用Join

上的数据库名称
function get_personas() {
        $this->db->join('DB2.administrador c', 'c.id_administrador = personas.id_administrador', 'left');
        $this->db->select('c.administrador_nombre AS admin', FALSE);
        $this->db->join('tipo_identificacion b', 'b.id_tipo_identificacion = personas.id_tipo_identificacion', 'left');
        $this->db->select('b.tipo_identificacion_nombre', FALSE);
        $this->db->select('personas.*', FALSE);
        $this->db->where('id_personas <>', 1);
        $query = $this->db->get('personas');
        if ($query->num_rows() > 0) {
            return $query->result();
        } else {
            return FALSE;
        }
    }