我有一个关于存储库的问题:是否可以使用
$em = $this->getDoctrine()
->getEntityManager();
$range = $em->getRepository('***Bundle:entityA')
->find($id);
在实体B的存储库中????
在您的存储库类中,您已经可以访问实体管理器,因此您只需要执行以下操作:
$this->getEntityManager()->getRepository('***Bundle:entityA')->find($id)
我推荐以下内容:
案例A: 您需要查询2个实体,彼此没有关系。使用 2 个存储库,2 个查询
$range1 = $em->getRepository('***Bundle:entityA')->find($id);
$range2 = $em->getRepository('***Bundle:entityB')->find($id);
案例B: 需要查询2个实体,相互关联,或者相互依赖。使用 1 个存储库,编写自定义存储库函数,加入它们,或在多个表上选择
$range = $em->getRepository('***Bundle:entityA')->findAjoinedB();
class EntityArepository extends EntityRepository
{
public function findAjoinedB(){
$qb = $this->createQueryBuilder('entityA')
->leftJoin('entityA.entityB_id', 'entityB')
->where(....
....;
return $qb->getQuery()->getResult();
}
}
如果您更喜欢注入依赖项,请将您的存储库声明为服务,以便您可以注入一个以在另一个内部使用它:
服务.yml
services:
repository.entity_a:
class: AppBundle\Entity\EntityARepository
factory: [@doctrine, getRepository]
arguments:
- AppBundle::EntityA
repository.entity_b:
class: AppBundle\Entity\EntityBRepository
factory: [@doctrine, getRepository]
arguments:
- AppBundle::EntityB
calls:
- [setEntityARepository, [@repository.entity_a]]
在EntityBRepository.php 中,您必须有一个属性设置器(setEntityARepository)来存储存储库(即$entityARepository)。