• Как правильно реализовать связь сущностей в Symfony2, используя Doctrine и, наверное, разные entity managers?

    если собиратесь делать 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();
    Ответ написан
    Комментировать