2013-02-14 153 views
0

有没有任何机构知道如何使用codeignitor活动记录从两个不同的数据库连接两个表?使用codeigniter中的活动记录加入两个数据库

我有这两个数据库实例:

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

我想从两个不同的数据库连接两个表。我怎样才能做到这一点?

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

回答

0

你有没有尝试在每个数据库的前缀?我没有访问我的本地服务器来测试这一点,但如果你有权限,这两个数据库类似这样的东西应该工作:

$this->db->select('*'); 
$this->db->from('asterisk.blogs'); 
$this->db->join('default.comments', 'default.comments.id = asterisk.blogs.id'); 
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(); 
+0

是有一些机会,你不必指定ON部分?因为我可以指定它没有活动记录,但我不知道如何并排活动记录。当我忽略'$ this-> db-> join()'函数中的第二个参数时,SQL左边总是有一个“ON”。能否请你帮忙? – kalafun 2013-09-17 16:56:23

0

在模型中调用另一个DB:

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

就用数据库的名称上加入

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; 
     } 
    } 
相关问题