Я пытаюсь настроить вторую базу данных для проекта Symfony 4.2.Кажется, что все работает нормально до того момента, когда я запускаю миграции, когда все миграции выполняются для данного соединения, а не только для тех соединений, для которых оно было создано.
Следуя собственной документации symfony овот так мой doctrine.yaml выглядит так:
doctrine:
dbal:
default_connection: default
connections:
default:
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
default_table_options:
charset: utf8mb4
collate: utf8mb4_unicode_ci
url: '%env(DATABASE_URL)%'
logging:
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
default_table_options:
charset: utf8mb4
collate: utf8mb4_unicode_ci
url: '%env(DATABASE_URL_LOG)%'
orm:
auto_generate_proxy_classes: '%kernel.debug%'
default_entity_manager: default
entity_managers:
default:
connection: default
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
mappings:
App:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity'
prefix: 'App\Entity'
alias: App
logging:
connection: logging
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: false
mappings:
Log:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Log'
prefix: 'App\Log'
alias: Log
Теперь с этой конфигурацией я могу запускать команды миграции с параметром --em = log / default, например:
php bin/console doctrine:migrations:diff --em=log
php bin/console doctrine:migrations:migrate --em=log
И вы получите ожидаемые результаты: он создает новую миграцию только для новой сущности, которую я создал в src / Log, когда я добавляю --em = log.
это новая сущность:
<?php
namespace App\Log;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity()
*/
class LogItem
{
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
*/
private $id;
}
Однако миграция создается в папке src / Migrations по умолчанию, и в результате:
1) эта миграция также выполняется при запуске doctrine:migrations:migrate --em=default
(создание таблицы по умолчаниюбаза данных)
2) вся схема по умолчанию загружается в базу данных журнала при запуске doctrine:migrations:migrate --em=log
Так что я думаю, что решение будет разделить файлы миграции наанимация для менеджеров сущностей в разных каталогах.Но я тратил часы и не могу найти способ сделать это для symfony4.Кроме того, поскольку в документации Symfony абсолютно ничего не говорится об этом, я чувствую, что, возможно, что-то не так в том, как это происходит сейчас.
Так может кто-нибудь сказать мне, что я делаю здесь неправильно?Или можно (и если да: как) разделить файлы миграции, чтобы он выполнял только те миграции, которые созданы для данного менеджера сущностей?