Использование отношений с несколькими менеджерами сущностей - программирование
Подтвердить что ты не робот

Использование отношений с несколькими менеджерами сущностей

Мне интересно, возможно ли создать связь между двумя объектами, которые находятся в разных базах данных.

Например, если мы нашли найденное здесь решение http://symfony.com/doc/current/cookbook/doctrine/multiple_entity_managers.html и создали отношение "один ко многим" с пользователями в базе данных клиентов к сообщениям в база данных по умолчанию.

Это что-то, что поддерживается Symfony2 и Doctrine?

4b9b3361

Ответ 1

Использование разных диспетчеров объектов (менеджеров сущностей) не позволяет пересекать объектные графы. Этот случай слишком сложный и не управляется Doctrine ORM.

Если вам нужен такой случай, держите графику объекта отключенным, сохраняя идентификаторы связанных объектов (старый стиль) вместо ссылки на них, а затем вручную получайте объекты через службы. Вы можете найти довольно хороший пример того, как это будет работать в примере соединения между Doctrine2 ORM и Doctrine2 MongoDB ODM. Кроме того, вы также можете использовать прослушиватель событий @PostLoad, который заполняет данные в ваших сущностях, создавая ссылку через репозитории, которые я связал в примере. То же самое для @PostPersist (который должен вместо этого извлекать идентификаторы для связанных объектов), но будьте осторожны, что этот метод может стать действительно грязным.

Кроме того, если ваша RDBMS поддерживает операции с несколькими базами данных на одном хосте, вы можете просто использовать один EntityManager и ссылаться на другую таблицу с помощью @ORM\Table(name="schemaname.tablename").