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
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.
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.
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.
- 1. Synchroniser les tables entre différents fournisseurs de bases de données
- 2. Comment gérer la suppression de nombreuses entités JPA qui ont des relations de clé étrangère
- 3. A et appartient à de nombreuses relations avec plusieurs bases de données
- 4. Bases de données relationnelles et langages OO
- 5. Créer des relations entre les tables
- 6. Postgresql interroger deux bases de données différentes qui ont des mêmes tables nommées
- 7. Transférer des objets et des données entre les bases de données SQL 2005
- 8. CakePHP a de nombreuses relations avec plusieurs colonnes
- 9. applications NHibernate pour 2 classes qui ont des relations multiples
- 10. Liaison de tables entre les bases de données
- 11. Conception de la base de données: Pourquoi certaines bases de données de commerce électronique ont-elles des tables distinctes pour les produits et les variantes de produits?
- 12. comment trouver des relations entre les tables
- 13. Synchroniser en continu des tables entre deux bases de données
- 14. Rails, ne peut pas charger les données des appareils qui ont des relations HABTM
- 15. Fusion de données entre les bases de données
- 16. Relations entre les tables
- 17. CakePHP HABTM liste des relations
- 18. LINQ to SQL: Récupère les enregistrements de deux DB qui se trouvent sur des serveurs différents
- 19. Relations avec les clients et les bases de données d'entreprise
- 20. CakePHP - basic hasAndBelongsToMany problème
- 21. J'ai des problèmes avec cakePHP Bake et l'une des tables de base de données
- 22. Préfixer des tables MySQL ou de nombreuses bases de données MySQL?
- 23. CakePHP hasAndBelongsToMany (HABTM) Supprimer l'enregistrement de jointure
- 24. Copier les tables entre les bases de données d'accès
- 25. Méthode la plus efficace pour interroger plusieurs tables identiques dans des bases de données distinctes
- 26. Intégrité référentielle SQL entre une table et l'une des nombreuses tables possibles
- 27. Y a-t-il des bases de données qui prennent en charge les tampons de protocole?
- 28. Relations complexes dans Ruby - afficher des données sur plusieurs tables
- 29. Comment faire pour synchroniser des tables similaires avec des noms différents entre deux bases de données SQL?
- 30. Pourquoi jQuery.each() et jQuery.grep() ont des ordres de paramètres différents?
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. –
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