我想在使用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"
最简单的方法是在构造函数中自动连接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;
}