如何在symfony 4中为一个方向使用两个实体管理器

如何在symfony 4中为一个方向使用两个实体管理器,symfony,doctrine-orm,doctrine,symfony4,entitymanager,Symfony,Doctrine Orm,Doctrine,Symfony4,Entitymanager,我与多个实体经理合作,跟踪Symfony doc, 但是我想对一个目录使用两个实体管理器。 它在findAll或findOneBy查询中工作不正常,它正在显示“默认”实体管理器的结果 在config/packages/doctrine.yaml中: dbal: # configure these for your database server default_connection: default connections: default:

我与多个实体经理合作,跟踪Symfony doc, 但是我想对一个目录使用两个实体管理器。 它在findAll或findOneBy查询中工作不正常,它正在显示“默认”实体管理器的结果

在config/packages/doctrine.yaml中:

dbal:
    # configure these for your database server
    default_connection: default
    connections:
        default:
            driver: 'pdo_mysql'
            server_version: '5.7'
            charset: utf8mb4
            default_table_options:
                charset: utf8mb4
                collate: utf8mb4_unicode_ci

            url: '%env(DATABASE_URL)%'

        blog:
            driver: 'pdo_mysql'
            server_version: '5.7'
            url: '%env(DATABASE_BLOG_URL)%'
            charset: utf8mb4
orm:
    auto_generate_proxy_classes: true
    default_entity_manager: default
    entity_managers:
        default:
            connection: default
            naming_strategy: doctrine.orm.naming_strategy.underscore
            mappings:
                Main:
                    is_bundle: false
                    type: annotation
                    dir: '%kernel.project_dir%/src/Entity'
                    prefix: 'App\Entity'
                    alias: Main

        blog:
            connection: blog
            naming_strategy: doctrine.orm.naming_strategy.underscore
            mappings:
                blog:
                    is_bundle: false
                    type: annotation
                    dir: '%kernel.project_dir%/src/Entity'
                    prefix: 'App\Entity'
                    alias: blog
在控制器中:

    $entityManager = $this->getDoctrine()->getManager('blog');

    $University = $entityManager->getRepository(University::class)
            ->findOneBy(array('Code' => $Code));

是否尝试将第二个DB的名称放入函数getRepository的第二个参数中,如下所示:

$University = $entityManager->getRepository(University::class, 'blog')
            ->findOneBy(array('Code' => $Code));
更新2:

仅使用此配置,不指定目录,但通过使用此配置,您将有义务使用香草SQL与数据库进行交互: 博客: 连接:博客 命名策略:doctrine.orm.naming\u strategy.下划线


我的最后一个建议是为每个连接创建不同的文件夹实体,并在其中复制相同的实体,这样您就可以正确地使用ORM原则。

您是否试图将第二个DB的名称放在函数getRepository的第二个参数中,如下所示:

$University = $entityManager->getRepository(University::class, 'blog')
            ->findOneBy(array('Code' => $Code));
更新2:

仅使用此配置,不指定目录,但通过使用此配置,您将有义务使用香草SQL与数据库进行交互: 博客: 连接:博客 命名策略:doctrine.orm.naming\u strategy.下划线


我的最后一个建议是为每个连接创建不同的文件夹实体,并在其中复制相同的实体,这样您就可以正确使用ORM原则。

我建议将连接作为服务注入控制器并利用自动连线

//控制器

public function testController(YourService $service){
        return $service->test();
}
//服务.yml

App\Service\YourService:
    public: true
    arguments: ['@doctrine.orm.entity_manager','@doctrine.orm.blog']
//src/service/YourService.php

class YourService {
    private $blog,$em;

public function __construct(EntityManager $em, EntityManager $blog) {
    $this->em = $em
    $this->blog = $blog;
}

 public function test()
    {
        //connect to blog
        $this->blog->getRepository(your_entity::class)->findAll();
        //connect to default
        $this->em->getRepository(your_entity::class)->findAll();
    }

我建议将连接作为服务注入控制器中,并利用自动布线

//控制器

public function testController(YourService $service){
        return $service->test();
}
//服务.yml

App\Service\YourService:
    public: true
    arguments: ['@doctrine.orm.entity_manager','@doctrine.orm.blog']
//src/service/YourService.php

class YourService {
    private $blog,$em;

public function __construct(EntityManager $em, EntityManager $blog) {
    $this->em = $em
    $this->blog = $blog;
}

 public function test()
    {
        //connect to blog
        $this->blog->getRepository(your_entity::class)->findAll();
        //connect to default
        $this->em->getRepository(your_entity::class)->findAll();
    }

出于好奇-这类设计决策的实际案例是什么?@飞行是一个多语言项目,我使用了一个源代码和多个数据库。出于好奇-这类设计决策的实际案例是什么?@飞行是一个多语言项目,我使用了一个源代码和多个数据库。是的,我这样做了,但我得到了相同的结果。是的,我做到了,但我得到了同样的结果。谢谢,我已经将“博客”实体管理器注入到我的存储库中,它与createQueryBuilder一起工作!谢谢,我已经将“博客”实体管理器注入到我的存储库中,它与createQueryBuilder一起工作!