我正在使用 Symfony 4 与现有的主/从 MySQL 设置进行交互,并使用原始 sql 对服务器执行查询。原始 SQL 是目前唯一的选择。
我正在使用显示完整进程列表;在数据库服务器上监视使用了哪个数据库,我只看到与主服务器的连接。似乎从未使用过任何奴隶。
作为参考,我有两个 dbal 连接设置,默认不是主/从,并使用 orm 映射。第二个是我遇到问题的主/从,这是我正在执行原始 sql 查询的服务器。
下面是我的教义.yml:
doctrine:
dbal:
default_connection: default
connections:
default:
driver: pdo_mysql
host: "%env(DATABASE_HOST)%"
dbname: "db1"
user: "%env(DATABASE_USER)%"
password: "%env(DATABASE_PASS)%"
charset: UTF8
ds:
driver: pdo_mysql
host: "%env(DS_DATABASE_HOST)%"
dbname: "db2"
user: "%env(DS_DATABASE_USER)%"
password: "%env(DS_DATABASE_PASS)%"
slaves:
slave1:
host: "%env(DS_DATABASE_SLAVE1_HOST)%"
user: "%env(DS_DATABASE_USER)%"
password: "%env(DS_DATABASE_PASS)%"
dbname: "db2"
slave2:
host: "%env(DS_DATABASE_SLAVE2_HOST)%"
user: "%env(DS_DATABASE_USER)%"
password: "%env(DS_DATABASE_PASS)%"
dbname: "db2"
orm:
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
Main:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity/Main'
prefix: 'App\Entity\Main'
alias: Main
ds:
connection: ds
我在 services.yml 中配置了我的实体管理器,如下所示:
# Entity managers
App\Service\Database\MainEntityManager:
arguments:
$wrapped: '@doctrine.orm.default_entity_manager'
App\Service\Database\DSEntityManager:
arguments:
$wrapped: '@doctrine.orm.ds_entity_manager'
实体管理器(在本例中为 DSEntityManager)被注入到类的构造函数中,然后按如下方式执行查询:
$result = $this->em->getConnection()->prepare($sql);
$result->execute($args);
如果我缺少任何有用的配置,请告诉我。
非常感谢您的帮助。