Symfony и Doctrine: отношения между базами данных

У меня есть две сущности Entity1 и Entity2 с отношением OneToMany, но они находятся в двух базах данных MySQL.

Как я могу реализовать эти объекты с их отношением в Symfony?

Можно ли создать два отдельных пакета для реализации этих объектов?


person Francesco Borzi    schedule 18.04.2016    source источник


Ответы (1)


В Doctrine объединение данных между базами данных технически не «поддерживается» разработанной функцией, но вы можете заставить ее работать, немного обманув Doctrine.

Если вы хотите построить отношения между сущностями, они должны использовать одно и то же соединение: одну и ту же базу данных.

Ключ к тому, чтобы заставить несколько баз данных работать, находится внутри ваших классов сущностей, вам нужно указать имя таблицы сущности с префиксом имени базы данных, к которой принадлежит таблица. Вот пример использования аннотаций:

<?php
namespace Demo\UserBundle\Entity;

use DoctrineORMMapping as ORM;

/**
 * Demo\UserBundle\Entity\User
 *
 * @ORMTable(name="users.User")
 */
class User implements
{
  /* ... */
}

а также

<?php
namespace Demo\PostBundle\Entity;

use DoctrineORMMapping as ORM;

/**
 * Demo\PostBundle\Entity\Post
 *
 * @ORMTable(name="posts.Post")
 */
class Post implements
{
  /* ... */
}

и таблица отношений:

<?php
namespace Demo\PostBundle\Entity;

use DoctrineORMMapping as ORM;

/**
 * Demo\PostBundle\Entity\Post
 *
 * @ORMTable(name="posts.Post")
 */
class Post implements
{
    /**
     * @ORM\ManyToOne(targetEntity="\Demo\UserBundle\Entity\User")
     **/
    private $user;

    /* ... */

    /**
     * Set user
     *
     * @param \Demo\UserBundle\Entity\Site $site
     * @return Post
     */
    public function setUser($user)
    {
        $this->user = $user;

        return $this;
    }

    /**
     * Get user
     *
     * @return \Demo\UserBundle\Entity\Site
     */
    public function getUser()
    {
        return $this->user;
    }
}

Вот статья об этом.

Надеюсь, это поможет

person Matteo    schedule 18.04.2016
comment
Грейзи! И могу ли я установить эту строку имени базы данных в качестве параметра конфигурации? Чао! - person Francesco Borzi; 19.04.2016
comment
привет @ShinDarth с аннотацией доктрины, я думаю, невозможно вставить параметры, но вы можете попробовать с аннотацией xml и поместить параметры с %db_name_1% надеюсь, что это поможет - person Matteo; 19.04.2016
comment
привет @ShinDarth ты пробовал мои решения? Это работает? - person Matteo; 21.04.2016
comment
привет @matteo, к сожалению, до сих пор у меня не было времени, и я думаю, что пока его не будет. Но я дам вам знать, спасибо за вопрос! - person Francesco Borzi; 22.04.2016
comment
Привет @ShinDarth, мне только это интересно, спасибо за дальнейшее обновление - person Matteo; 22.04.2016
comment
пожалуйста. А вы? Вы пробовали подобное? - person Francesco Borzi; 22.04.2016
comment
Работает ли это, если база данных находится на разных серверах, т.е. использует разные менеджеры сущностей? - person Vinayak; 27.09.2016
comment
@Vinayak кажется невозможным, для этого трюка нужно использовать то же соединение: ту же базу данных. - person Matteo; 27.09.2016
comment
Создает ли он таблицу БД при запуске команды cli? Пожалуйста, подтвердите, что - person Vinayak; 27.09.2016