2013-02-14 1 views
0

Est-ce que n'importe quel corps a une idée de comment joindre deux tables à partir de deux bases de données différentes en utilisant codeignitor active record?Rejoindre deux bases de données en utilisant l'enregistrement actif dans le codeigniter

J'ai ces deux instances de base de données:

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

Je veux joindre deux tables à partir de ces deux bases de données différentes. Comment puis-je accomplir cela?

S'il vous plaît, si vous avez des liens de docs me donner.

Répondre

0

Avez-vous essayé de préfixer chaque base de données? Je n'ai pas accès à mon serveur local pour tester, mais si vous avez des autorisations à deux bases de données quelque chose de semblable à cela devrait fonctionner:

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

Si you'r pas en mesure de se joindre aux deux bases de données différentes, et ne veulent pas utiliser les instructions SQL régulières - vous pouvez essayer de le faire en utilisant la mise en cache ActiveRecord.

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

Certains "pseudo-code" qui ne fonctionnera probablement pas - mais peut vous aider à démarrer.

$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

Y at-il une chance que vous ne devez pas spécifier la partie ON? Parce que je peux le spécifier sans enregistrement actif, mais je ne sais pas comment le faire côte à côte enregistrement actif. Quand je laisse de côté le deuxième paramètre dans la fonction '$ this-> db-> join()', il y a toujours un "ON" dans le SQL restant. S'il te plait peux-tu aider? – kalafun

0

Dans votre modèle Appelez le DB autre:

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

alors il suffit d'utiliser le nom de la base de données sur la jointure

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; 
     } 
    } 
Questions connexes