В настоящее время у меня есть следующий макет в базе данных:
- legacy_db
- legacy_out
- применение
Мы работаем над новой концепцией, в которой мы добавляем микро-сервис для обработки всего, что поступает в нашу устаревшую БД, и сервис, который обрабатывает исходящий поток.
Сами приложения работают хорошо.
Единственная реальная проблема, с которой я сейчас сталкиваюсь, - это доктрина и доктрина миграции.
Каждый раз, когда мы запускаем diff, у нас также есть все устаревшие записи в db, и мы должны удалить их.
Мы хотели бы сохранить перенос доктрин, поскольку они достаточно хорошо интегрируются с файлами миграции классов в нашу концепцию.
Legacy DB не следует обновлять ни при каких обстоятельствах, но они постоянно вставляются в эти файлы.
Мы запускаем diff с помощью следующей команды:
. / Bin / console доктрина: миграции: diff --em = application
Эта команда должна исключить устаревшие базы данных, так как они зарегистрированы в совершенно другом диспетчере сущностей в конфигурации.
файл конфигурации:
parameters:
# Adds a fallback DATABASE_URL if the env var is not set.
# This allows you to run cache:warmup even if your
# environment variables are not available yet.
# You should not need to change this value.
env(DATABASE_APPLICATIONURL): ''
env(DATABASE_LEGACY_DB_URL): ''
env(DATABASE_LEGACY_LOG_URL): ''
env(DATABASE_LEGACY_OUT_URL): ''
doctrine:
dbal:
default_connection: application
connections:
application:
url: '%env(DATABASE_APPLICATIONURL)%'
server_version: '5.7'
charset: '%env(DATABASE_APPLICATIONCHARSET)%'
default_table_options:
charset: '%env(DATABASE_APPLICATIONCHARSET)%'
collate: '%env(DATABASE_APPLICATIONCOLLATE)%'
legacydb:
url: '%env(DATABASE_LEGACY_DB_URL)%'
server_version: '5.7'
charset: '%env(DATABASE_LEGACY_DB_CHARSET)%'
default_table_options:
charset: '%env(DATABASE_LEGACY_DB_CHARSET)%'
collate: '%env(DATABASE_LEGACY_DB_COLLATE)%'
legacylog:
url: '%env(DATABASE_LEGACY_LOG_URL)%'
server_version: '5.7'
charset: '%env(DATABASE_LEGACY_LOG_CHARSET)%'
default_table_options:
charset: '%env(DATABASE_LEGACY_LOG_CHARSET)%'
collate: '%env(DATABASE_LEGACY_LOG_COLLATE)%'
legacyout:
url: '%env(DATABASE_LEGACY_OUT_URL)%'
server_version: '5.7'
charset: '%env(DATABASE_LEGACY_OUT_CHARSET)%'
default_table_options:
charset: '%env(DATABASE_LEGACY_OUT_CHARSET)%'
collate: '%env(DATABASE_LEGACY_OUT_COLLATE)%'
orm:
default_entity_manager: application
auto_generate_proxy_classes: '%kernel.debug%'
entity_managers:
application:
connection: application
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
mappings:
Application:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/vendor/COMPANY/entitybundle/src/Entity/Application'
prefix: 'Application\Entity\Entity\Application'
alias: App
gedmo_translatable:
type: annotation
prefix: Gedmo\Translatable\Entity
dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Translatable/Entity"
alias: GedmoTranslatable # (optional) it will default to the name set for the mapping
is_bundle: false
gedmo_sortable:
type: annotation
prefix: Gedmo\Sortable\Entity
dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Sortable/Entity"
alias: GedmoTree
is_bundle: false
gedmo_loggable:
type: annotation
prefix: Gedmo\Loggable\Entity
dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Loggable/Entity"
alias: GedmoLoggable # (optional) it will default to the name set for the mappingmapping
is_bundle: false
gedmo_tree:
type: annotation
prefix: Gedmo\Tree\Entity
dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Tree/Entity"
alias: GedmoTree # (optional) it will default to the name set for the mapping
is_bundle: false
filters:
softdeleteable:
class: Gedmo\SoftDeleteable\Filter\SoftDeleteableFilter
enabled: true
legacydb:
connection: legacydb
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: false
mappings:
InDB:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/vendor/COMPANY/entitybundle/src/Entity/LegacyDb'
prefix: 'Application\Entity\LegacyDb'
alias: legacydb
legacylog:
connection: legacylog
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: false
mappings:
LogDB:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/vendor/COMPANY/entitybundle/src/Entity/LegacyLog'
prefix: 'Application\Entity\LegacyLog'
alias: legacylog
legacyout:
connection: legacyout
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: false
mappings:
CacheDB:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/vendor/COMPANY/entitybundle/src/Entity/LegacyOut'
prefix: 'Application\Entity\LegacyOut'
alias: legacyout
важно держать их разделенными, так как устаревшие таблицы будут удалены рано или поздно, но их нельзя удалить, и приложение должно обрабатывать их в тот момент, пока устаревшая система не будет удалена.
Как я могу сказать, что миграции доктрин игнорируют все сущности в менеджере сущностей?