2015-10-13 1 views
0

Je suis en train de passer de SQL existant DoctrineCan Doctrine peut-il effectuer un SELECT sur des tables à partir de plusieurs bases de données?

Par exemple, si j'ai une requête comme ceci:

SELECT column_list 
FROM db1 
INNER JOIN db2 ON db1.col=db2.col 
INNER JOIN db3 ON db2.col=db3.col 
WHERE where_conditions; 

peut Doctrine être utilisé pour correspondre à la SQL ci-dessus?

Actuellement, il me semble que la doctrine peut travailler avec plusieurs entités séparément, mais je n'ai pas trouvé la documentation si la doctrine ou ne peut pas combiner les entités en une seule commande SELECT. Je suppose qu'il existe une solution de contournement qui consiste à utiliser plusieurs entités séparément, c'est-à-dire à diviser la requête ci-dessus en plusieurs parties où une seule base de données est impliquée dans une requête, mais j'hésiterais à le faire s'il y a est un meilleur moyen.

+0

trouvé cet article qui peut être utile https://techpunch.co.uk/development/using-multiple-databases-with-symfony2-and-doctrine2 – Dennis

Répondre

1

De techpunch article il me semble que vous pouvez simplement utiliser le séparateur "point" dans l'option de votre nom d'entité, laissant tout le reste pareil. Par conséquent, vous gagnez la capacité d'utiliser les entités telles quelles, et les bases de données appropriées seront sélectionnées pour vous.

/** 
* @Entity 
* @Table(name="database_name.table_name") 
*/ 
class YourEntity 
+0

Cela ne fonctionne que si les deux bases de données sont sur le même serveur et a l'inconvénient supplémentaire de "coder en dur" le nom de la base de données dans vos entités. Juste quelque chose à savoir. – Cerad

+0

Quel peut être un inconvénient de coder en dur un nom de base de données dans une entité? – Dennis

+0

Dans un cas normal, vous spécifiez le nom de la base de données en tant qu'élément de configuration, ce qui facilite le changement ou indique une base de données de test. Hardcoding signifie que vous devez modifier votre code pour modifier le nom de la base de données. – Cerad