使用多个数据库时的问题

问题描述 投票:0回答:1

背景:我正在使用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的数据库:((。

我在配置中做错了吗?还是在其他地方需要配置其他内容?

非常感谢您的帮助

坦率

symfony doctrine
1个回答
0
投票

两个实体管理器在您的映射中都有相同的前缀。您应该尝试类似

prefix: 'App\Entity\Client1'
//...
prefix: 'App\Entity\Client2'

这就是他们在文档中所做的。

© www.soinside.com 2019 - 2024. All rights reserved.