Vous travaillez avec symfony, votre projet fonctionne à merveille et vous avez pu apprécier la puissance de doctrine pour gérer votre base de données, mais, vous aimeriez pouvoir utiliser une deuxième base de données avec votre site pour une raison quelconque : voici comment faire.
La mise à jours 1.4.6 vers 1.4.7 pose un problème puisque symfony n’utilise plus la connexion propre à chaque objet et se connecte tout le temps à la dernière connexion spécifiée dans databases.yml. Ce problème n’est toujours pas résolu dans la version 1.4.8. Un ticket est ouvert (http://trac.symfony-project.org/ticket/9096). Le patch fourni par l’auteur du ticket permet de continuer de travailler en attendant la cloture du ticket.
diff /lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Table.php 1036c1036 < return Doctrine_Query::create($this->_conn, $class) --- > return Doctrine_Query::create(null, $class)
Actuellement votre fichier « config/database.yml » ressemble à ceci :
dev: doctrine: class: sfDoctrineDatabase param: dsn: mysql:host=host_dev;dbname=database_dev username: username password: password prod: doctrine: class: sfDoctrineDatabase param: dsn: mysql:host=host_prod;dbname=database_prod username: username password: password
et votre fichier « config/doctrine/schema.yml » ressemble à cela :
[...] Table_1: columns: column_1 : { ... } column_2 : { ... } Table_2: columns: column_1 : { ... } column_2 : { ... } [...]
Afin de pouvoir utiliser Symfony avec une deuxième base de données, il vous suffit d’en configurer une nouvelle dans le fichier « config/database.yml », comme vous l’avez fait pour la première :
dev: doctrine_database_1: class: sfDoctrineDatabase param: dsn: mysql:host=host_dev_1;dbname=database_dev_1 username: username password: password doctrine_database_2: class: sfDoctrineDatabase param: dsn: mysql:host=host_dev_2;dbname=database_dev_2 username: username password: password prod: doctrine_database_1: class: sfDoctrineDatabase param: dsn: mysql:host=host_prod_1;dbname=database_prod_1 username: username password: password doctrine_database_2: class: sfDoctrineDatabase param: dsn: mysql:host=host_prod_2;dbname=database_prod_2 username: username password: password
Maintenant que ces modifications sont effectuées, il ne reste qu’à configurer votre « config/doctrine/schema.yml » pour qu’il prenne en compte votre nouveau « config/database.yml ». Voici ce que vous devriez obtenir :
[...] Database_1_Table_1: connection: doctrine_database_1 columns: column_1 : { ... } column_2 : { ... } Database_1_Table_2: connection: doctrine_database_1 columns: column_1 : { ... } column_2 : { ... } [...] Database_2_Table_1: connection: doctrine_database_2 columns: column_1 : { ... } column_2 : { ... } Database_2_Table_2: connection: doctrine_database_2 columns: column_1 : { ... } column_2 : { ... } [...]
Voilà, votre projet Symfony peut désormais fonctionner avec deux bases de données. Vous pouvez rajouter autant de bases de données que vous désirez en suivant la même procédure. Bon développement !
Remarques :
Ou alors, vous pouvez garder à l’esprit que sans précision de votre part, les tables sont créées dans la dernière configuration de base trouvée dans « config/database.yml ».
Super explication, vous m’avez sortie l’épinde du pied !!!