这两个陈述之间是否有任何区别:
$this->getDoctrine()->getEntityManager()->getRepository();
$this->getDoctrine()->getRepository();
差异是否与我错过的任何OOP概念有关?
答案 0 :(得分:8)
一般而言,没有区别,因为
$this->getDoctrine()->getRepository();
只是
的帮手$this->getDoctrine()->getEntityManager()->getRepository();
您可以拥有多个实体管理器,然后从一个实体库获取存储库会略有不同:
$this->getDoctrine()->getRepository($entityName, $enityManagerName);
$this->getDoctrine()->getEntityManager($entityManagerName)->getRepository($entityName);
但是,再次,你得到的结果没有区别。
在所有其他条件相同的情况下,我会选择最短的。
答案 1 :(得分:1)
结果是一样的,但如果你需要entityManager不仅仅是获取存储库,那么存储它然后接收存储库以及执行其他操作(例如flush)可能很方便:
$_em = $this->getDoctrine()->getEntityManager();
$repository = $_em->getRepository();
//...
$_em->flush();
如前所述,如果您只需要获取存储库,请使用第二个语句,该语句比第一个语句更简单易读。
答案 2 :(得分:1)
没有区别。如果你看一下AbstractManagerRegistry.php的源代码。你可以看到这段代码:
public function getRepository($persistentObjectName, $persistentManagerName = null)
{
return $this->getManager($persistentManagerName)->getRepository($persistentObjectName);
}
如您所见,当您调用getRepository()时,它首先调用getManager()然后调用getRepository()。我建议使用第二个,因为它在诸如PHPStorm之类的IDE中提供智能感知。希望它有所帮助。