我对存储库有疑问:是否可以使用
$em = $this->getDoctrine()
->getEntityManager();
$range = $em->getRepository('***Bundle:entityA')
->find($id);
在entityB ????
的存储库中答案 0 :(得分:6)
在您的资源库类中,您已经可以访问实体管理器,因此您只需要执行以下操作:
$this->getEntityManager()->getRepository('***Bundle:entityA')->find($id)
答案 1 :(得分:1)
我建议如下:
案例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();
}
}
答案 2 :(得分:0)
如果您想要更多注入依赖项,请将您的存储库声明为服务,这样您就可以注入一个以在另一个中使用它:
<强> services.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中,你必须有一个setter(setEntityARepository)来存放一个存储库(即$ entityARepository)。