Проблема вызвана тем, как Symfony объединяет файлы конфигурации.
/config/packages/*.yml
> /config/packages/<env>/*.yml
Это приводит к тому, что все соединения и менеджеры сущностей, определенные в packages/doctrine.yml
, являютсядобавлен к вашему packages/test/doctrine.yml
Чтобы увидеть объединенные параметры конфигурации, которые Symfony будет использовать, запустите:
php bin/console --env=test debug:config doctrine
Из-за этого при запуске bin/console --env=test doctrine:schema:create
попытается создать схему для ВСЕ из менеджеров сущностей , присутствующих в результирующей конфигурации.
Чтобы решить эту проблему, вам нужно разделить конфигурации среды на prod
, test
и dev
или альтернативно используйте .env.test
, чтобы изменить URL-адреса, используемые Syfmony.
В зависимости от того, как вам нужен доступ к вашим менеджерам сущностей
Пример
Это только пример того, как разделить конфигурации среды, обязательно измените все необходимые значения для требований вашего приложения
config / packages / doctrine.yml
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_URL): ''
doctrine:
orm:
auto_generate_proxy_classes: true # <- change to true
proxy_dir: '%kernel.cache_dir%/doctrine/orm/Proxies'
proxy_namespace: Proxies
config / packages / dev / doctrine.yml
doctrine:
dbal:
# configure these for your database server
connections:
gui:
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
default_table_options:
charset: utf8mb4
collate: utf8mb4_unicode_ci
url: '%env(resolve:DATABASE_GUI_URL)%'
upv6:
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
default_table_options:
charset: utf8mb4
collate: utf8mb4_unicode_ci
url: '%env(resolve:DATABASE_UPV6_URL)%'
entity_managers:
gui:
connection: gui
mappings:
Gui:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity/Gui'
prefix: 'App\Entity\Gui'
alias: Gui
upv6:
connection: upv6
mappings:
Upv6:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity/Upv6'
prefix: 'App\Entity\Upv6'
alias: Upv6
config / packages / test / doctrine.yml
doctrine:
dbal:
driver: 'pdo_sqlite'
url: 'sqlite:///%kernel.project_dir%/var/data/test.sqlite'
#DEFINE THE ENTITY MANAGERS TO USE THE default CONNECTION
#orm:
#since the connections are not the same
#you need to define your entity managers here...
#entity_managers:
# gui:
# connection: default #<---- NOTICE DEFAULT and not gui
# (not sure what entity managers are needed for sqlite)
#...
config / packages / prod / doctrine.yml
imports:
- { resource: '../dev/doctrine.yaml' }
doctrine:
orm:
auto_generate_proxy_classes: false #<-- change to false
metadata_cache_driver:
type: service
id: doctrine.system_cache_provider
query_cache_driver:
type: service
id: doctrine.system_cache_provider
result_cache_driver:
type: service
id: doctrine.result_cache_provider
#...