Tôi đã định cấu hình hai kết nối với cơ sở dữ liệu. Một kết nối được gọi là người dùng và khác được gọi là khách hàng. Đây là cấu hình trong tệp config.yml:Nhiều người quản lý thực thể trong Symfony 3.3 đường nối không hoạt động như đối số dịch vụ
doctrine:
dbal:
default_connection: client
connections:
client:
driver: pdo_mysql
host: '%client_database_host%'
port: '%client_database_port%'
dbname: '%client_database_name%'
user: '%client_database_user%'
password: '%client_database_password%'
charset: UTF8
mapping_types:
enum: string
user:
driver: pdo_mysql
host: '%user_database_host%'
port: '%user_database_port%'
dbname: '%user_database_name%'
user: '%user_database_user%'
password: '%user_database_password%'
charset: UTF8
mapping_types:
enum: string
orm:
auto_generate_proxy_classes: '%kernel.debug%'
default_entity_manager: ~
entity_managers:
client:
naming_strategy: doctrine.orm.naming_strategy.underscore
mappings:
ProjectModelBundle: ~
connection: client
user:
naming_strategy: doctrine.orm.naming_strategy.underscore
mappings:
BaseModelBundle: ~
ProjectModelBundle: ~
connection: user
Nhưng tôi luôn nhận được người quản lý thực thể đầu tiên bất kể điều gì. Đây là cách tôi đang sử dụng dịch vụ của người quản lý thực thể trong các dịch vụ:
# BASE
htec.project_model_bundle.repository.database.client_base:
class: Project\BaseModelBundle\Repository\Database\DatabaseRepository
arguments: ['@service_container', '@doctrine.orm.client_entity_manager', '@form.factory']
htec.project_model_bundle.repository.database.user_base:
class: Project\BaseModelBundle\Repository\Database\DatabaseRepository
arguments: ['@service_container', '@doctrine.orm.user_entity_manager', '@form.factory']
Nhưng bất kể tôi làm gì, tôi luôn nhận được người quản lý thực thể đầu tiên mà tôi đã xác định trong cài đặt orm-> entity_managers. Ví dụ, nếu cấu hình orm như thế này:
orm:
auto_generate_proxy_classes: '%kernel.debug%'
default_entity_manager: ~
entity_managers:
client:
naming_strategy: doctrine.orm.naming_strategy.underscore
mappings:
ProjectModelBundle: ~
connection: client
user:
naming_strategy: doctrine.orm.naming_strategy.underscore
mappings:
BaseModelBundle: ~
ProjectModelBundle: ~
connection: user
tôi sẽ luôn luôn có được người quản lý thực thể khách hàng ngay cả khi tôi cung cấp '@ doctrine.orm.user_entity_manager' như là đối số dịch vụ.
Nếu tôi cấu hình ORM như thế này:
orm:
auto_generate_proxy_classes: '%kernel.debug%'
default_entity_manager: ~
entity_managers:
user:
naming_strategy: doctrine.orm.naming_strategy.underscore
mappings:
BaseModelBundle: ~
ProjectModelBundle: ~
connection: user
client:
naming_strategy: doctrine.orm.naming_strategy.underscore
mappings:
ProjectModelBundle: ~
connection: client
Tôi sẽ luôn luôn nhận được quản lý sử dụng thực thể ngay cả khi tôi cung cấp '@ doctrine.orm.client_entity_manager' như là đối số dịch vụ.
Tôi đang làm gì sai ở đây?
Bạn đã kiểm tra 'bin/console debug : container doctrine.orm.client_entity_manager' (hoặc khác) cho dù các dịch vụ được đăng ký một cách chính xác trong container? – dbrumann
Bạn đã thử sử dụng '@ doctrine' cung cấp cho bạn một [Registry] (https://github.com/doctrine/DoctrineBundle/blob/master/Registry.php) mà bạn có thể sử dụng' getEntityManagerForClass() 'để lấy ra quản lý thực thể đúng cho bất kỳ lớp nào bên trong dịch vụ của bạn? – dbrumann