背景:我正在使用Symfony5为客户开发Web应用程序。该应用程序应可用于多个客户。每个客户应获得自己的文件目录(用于pdf等)和数据库。文件目录不是问题,但是数据库无处可去。根据Symfony docu,您可以使用不同的DB。我在config / packages / doctrine.yaml中进行了配置。
doctrine:
dbal:
connections:
Client1:
dbname: client1
host: localhost
port: 3306
user: admin
password: secret_pw
driver: pdo_mysql
server-version: 5.7
Client2:
dbname: client2
host: localhost
port: 3306
user: admin
password: secret_pw
driver: pdo_mysql
server-version: 5.7
orm:
auto_generate_proxy_classes: true
entity_managers:
Client1:
connection: Client1
naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
mappings:
Client1:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity'
prefix: 'App\Entity'
alias: Client1
Client2:
connection: Client2
naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
mappings:
Client2:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity'
prefix: 'App\Entity'
alias: Client2
到目前为止,如果我从CLI创建数据库并执行迁移,它也可以使用。
但是如果我想阅读DB2 for Client2(在$ dbClient中设置)中的用户,使用
$userRepo = $this->getDoctrine()
->getRepository(User::class, $dbClient);
$user = $userRepo->findOneByeEmail($this->userEmail);
总是在回购中设置Client1的数据库:((。
我在配置中做错了吗?还是在其他地方需要配置其他内容?
非常感谢您的帮助
坦率
两个实体管理器在您的映射中都有相同的前缀。您应该尝试类似
prefix: 'App\Entity\Client1'
//...
prefix: 'App\Entity\Client2'
这就是他们在文档中所做的。