если собиратесь делать join-ы из разных БД, то Doctrine позволяет сделать это:
Cross Database Joins
не везде прямо говорится о том, что join не будет работать при нескольких EntityManager, только при одном, который получится при работе auto_mapping: true
для этого прописываете в настройках config.yml:
doctrine:
dbal:
default_connection: main_db
connections:
main_db:
driver: "%database_users_driver%"
host: "%database_users_host%"
port: "%database_users_port%"
dbname: "%database_users_name%"
user: "%database_users_user%"
password: "%database_users_password%"
charset: UTF8
other_db:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
orm:
auto_generate_proxy_classes: %kernel.debug%
auto_mapping: true
чтобы все заработало надо не забыть указать имена таблиц при определении Entity в формате "db_name.table_name", например:
/**
* Product
*
* @ORM\Table(name="main_db.Product")
* @ORM\Entity(repositoryClass="AcmeBundle\Entity\ProductRepository")
*
*/
class Product
{ ....
после этого в своем EntityRepository спокойно себе формируете dql-запрос типа такого:
$sql = "SELECT p FROM AcmeBundle:Product p JOIN p.tag t WHERE ... ORDER BY ...";
query = $this->_em->createQuery($sql)->setParameters(array(...));
return $query->getResult();