2011-10-11 3 views
3

Bonjour,Codeigniter DataMapper Cross-Database rejoint

Je travaille actuellement sur un projet qui utilise Codeigniter et la Bibliothèque DataMapper (http://datamapper.wanwizard.eu). Le projet utilise une base de données centrale pour les données utilisateur (appelée "base") et une base de données séparée pour les données d'application ("crm"). Ceci afin qu'à l'avenir, nous puissions construire d'autres applications utilisant le répertoire utilisateur sans être liées à un seul serveur.

J'ai un problème en ce que j'ai besoin d'utiliser les relations de Datamapper intégrées, mais à travers les deux bases de données. Voici ma configuration jusqu'à présent:

Personne Modèle

class person extends DataMapper { 

    var $db_params = 'base'; 
    var $prefix = 'base_'; 

    var $has_many = array(
     'initiated_event' => array('class' => 'event','other_field' => 'initiator') 
    ) 

} 

Modèle événement

class event extends DataMapper { 

    var $db_params = 'crm'; 
    var $prefix = 'crm_'; 

    var $has_one = array(
     'initiator' => array('class' => 'person','other_field' => 'initiated_event') 
    ) 

} 

Le problème

Lorsque je tente d'utiliser Events- $ > initiateur-> get(), je reçois l'erreur suivante:

Error Number: 1146 
Table 'circle_base.crm_events' doesn't exist 
SELECT `base_persons`.* FROM (`base_persons`) LEFT OUTER JOIN `crm_events` initiated_event_crm_events ON `base_persons`.`id` = `initiated_event_crm_events`.`initiator_id` WHERE `initiated_event_crm_events`.`id` = 1 
Filename: C:\xampp\htdocs\circle\crm\system\database\DB_driver.php 
Line Number: 330 

Quelqu'un pourrait faire la lumière sur la question? DataMapper prend-il réellement en charge les jointures entre bases de données. Si non, y a-t-il un moyen d'y parvenir?

+0

J'ai la même question. J'ai posté une [question] (http://stackoverflow.com/questions/16171576/joining-tables-in-different-databases-with-the-ci-datamapper-orm) plus tôt à ce sujet. J'ai jeté un coup d'oeil à la bibliothèque de datamapper et il semble qu'ils ne vérifient pas si la table liée est dans une autre base de données. Comment avez-vous abordé ce problème? – Brainfeeder

Répondre

1

Vous ne pouvez pas faire cela à travers les bases de données, vous pouvez même voir à partir de votre SQL qu'il essaie d'interroger une seule base de données (le manque de notation pour la base de données même). Je suppose que vos deux bases de données sont dans le même serveur? Dans ce cas, vous pouvez essayer d'écrire une requête SQL personnalisée (pas sûr sur vos bases de données) mais dans la requête, définissez la relation database.table et essayez avec une simple instruction.

Sinon, vous devrez résoudre ce problème par programme via objects/arrays/etc;

Références:
http://nathan.rambeck.org/blog/2-joining-mysql-tables-across-multiple-databases

Questions connexes