У меня есть две базы данных в моем проекте.
Первая база данных с именем: global
Вторая база данных называется: first_db
Глобальный База данных имеет таблицу Car
а также Moto
и first_db база данных имеет таблицы Items
, Bus
а также Ship
,
Ниже поста вы видите аннотации таблицы предметов.
* @ORM\Table(name="Items")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="type", type="string")
* @ORM\DiscriminatorMap( {
* "car" = "Project\ItemBundle\EntityGlobal\Car",
* "moto" = "Project\ItemBundle\EntityGlobal\Moto",
* "bus" = "Bus",
* "ship" = "Ship",
* }
* )
Когда я создаю запрос с DQL, он не понимает, что car
а также moto
находятся в другой базе данных. Я нашел бета-решение, если лица Car
а также Moto
установить аннотацию с помощью этого метода
* @ORM\Table(name="global.Moto")
* @ORM\Table(name="global.Car")
При обновлении схемы у меня нет проблем, но это не очень безопасно. Я знаю, что могу писать нативные запросы, но я не уверен, что это оптимальный способ.
Каков лучший способ сделать это, не используя нативные запросы?
В базовой настройке от Symfony вы используете только 1 базу данных, которая определена в файле parameters.yml. Использование второй базы данных возможно, но усложняет все
Использование нескольких баз данных (соединений) можно настроить так: http://symfony.com/doc/current/cookbook/doctrine/multiple_entity_managers.html
Но соединение разных сущностей из разных баз данных (соединений) невозможно, смотрите этот ответ: Использование отношений с несколькими менеджерами сущностей
Я предлагаю вам строго рассмотреть возможность объединения ваших таблиц в одну базу данных, чтобы сделать вашу жизнь намного проще.
Других решений пока нет …