2010-07-30 4 views
0

J'ai tout à fait le problème complexe de vous parler de Stackoverflow, vous voyez que j'ai trois tables dont j'ai besoin pour définir des associations entre une application. Ces tables sont: ingénieurs, tickets et testcases. Je dois avoir une relation $ hasMany entre les ingénieurs et les tickets, et une relation hasAndBelongsToMany entre les testcases et les tickets. Voici la capture, les ingénieurs et les testcases sont tous les deux sur une base de données mysql, alors que les tickets sont sur une base de données sqlite3 (trac) sur un serveur séparé. La partie serveur séparée n'est pas un problème, car le serveur est monté sur la même machine que mon application. Je me demande essentiellement comment vous allez configurer ces relations, de sorte que chaque modèle est chargé, ses dépendances sont également chargées. J'utiliserai littéralement n'importe quelle solution qui fait le travail. J'utilise CakePHP en passant.

Répondre

0

Je ne pense pas que ce soit un problème de travailler avec 2 (ou plus) connexions de base de données dans CakePHP.

Fondamentalement, vous avez besoin de 2 chaînes de connexion dans votre /app/config/database.php i.e. .:

class DATABASE_CONFIG { 

    var $mysql = array(
     'driver' => 'mysql', 
     'persistent' => false, 
     'host' => 'localhost', 
     'login' => 'user', 
     'password' => 'password', 
     'database' => 'database', 
     'prefix' => '', 
     'encoding'=>'utf8' 
    ); 

    var $sqlite = array(
     'driver' => 'sqlite', 
     'persistent' => false, 
     'host' => 'localhost', 
     'login' => 'user', 
     'password' => 'password', 
     'database' => 'database', 
     'prefix' => '', 
     'encoding'=>'utf8' 
    ); 
} 

btw. Je ne suis pas tout à fait sûr du pilote sqlite, mais ça devrait être comme ça.

Enfin, vous devez définir pour chaque modèle la connexion à utiliser. Cela peut être fait avec:

class tickets extends AppModel { 
    ... 
    var $useDbConfig = 'sqlite'; 
    ... 
} 

Et surtout si vous n'utilisez pas de "hacks" SQL spéciaux, cela devrait fonctionner.

+0

Hmm, maintenant quand je pense que je ne suis pas sûr si cette solution pourrait fonctionner à 100%, mais ça vaut le coup d'essayer. –

+0

Malheureusement, cela ne fonctionne pas, c'est en fait la config que j'ai utilisé pendant un certain temps. Je pense que mon administrateur et moi-même sommes d'accord sur le fait qu'il est probablement préférable de créer une copie de la table tickets sur ma base de données mysql et de programmer un job cron pour copier sur la table de temps en temps. – JayD3e

1

Les associations HABTM ne sont pas prises en charge sur plusieurs bases de données dans CakePHP. Afin de faire les associations, vous aurez besoin de changer le noyau. Au moins une personne a réussi cela. Regardez his method.

1

Vous pouvez simplement pas définir l'association et faire l'interrogation manuellement. -À-dire, vous associez le modèle de billets avec sa jointure HABTM TestcaseTickets de table dans une relation belongsTo (en supposant qu'ils sont tous les deux dans la base de données SQLite) et d'interroger manuellement:

$testcases = $this->Testcase->find(…); 
$tickets = $this->Ticket->TestcaseTickets->find('all', array(
    'conditions' => array(
     'TestcaseTickets.testcase_id' => Set::extract('/Testcase/id', $testcases) 
    ) 
)); 

Il enlève un peu de complaisance, mais doesn Ne faites pas une grande différence à la fin, surtout si vous le faites automatiquement dans le rappel afterFind du modèle Testcase.

Questions connexes