如何在多个实体管理器中使用Symfony自动装配

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

我想在使用2个不同实体管理器的服务中使用自动装配。我找不到方法。如何实现这样的目标? :

use Doctrine\ORM\EntityManager;
class TestService
{
    public function __construct(EntityManager $emA, EntityManager $emB)
    {
    }
}

我的service.yml文件用于这样配置:

    app.testservice:
        class: App\Services\TestService
        arguments:
            - "@doctrine.orm.default_entity_manager"
            - "@doctrine.orm.secondary_entity_manager"
symfony autowired entitymanager
1个回答
0
投票

最简单的方法是在构造函数中自动连接ManagerRegistry,并使用它在配置文件中设置的实体管理器的名称(doctrine.yaml)来获取所需的管理器。 :

use Doctrine\Common\Persistence\ManagerRegistry;
class TestService
{

    private $emA;
    private $emB;
    public function __construct(ManagerRegistry $doctrine)
    {
         $this->emA = $doctrine->getManager('emA');
         $this->emB = $doctrine->getManager('emB');
    }
}

而且您应该可以根据需要使用它们。


另一种方式是跟随this answer by Ron Mikluscak

基本使用EntityManagerDecorator创建想要扩展的实体管理器EntityManagerDecorator以自动装配新类:

use Doctrine\ORM\Decorator\EntityManagerDecorator;

class EntityManagerA extends EntityManagerDecorator {}

class EntityManagerB extends EntityManagerDecorator {}

然后在您的doctrine.yaml中配置那些实体管理器>

emA:
        arguments:
            - "@doctrine.orm.default_entity_manager"
emB:
        arguments:
            - "@doctrine.orm.secondary_entity_manager"

最后使用它们将它们自动连接到构造函数中:

public function __construct(EntityManagerA $emA, EntityManagerB $emB)
        {
             $this->emA = $emA;
             $this->emB = $emB;
        }
© www.soinside.com 2019 - 2024. All rights reserved.