Symfony2中的getEntityManager()和getDoctrine()

时间:2011-11-29 18:44:29

标签: symfony doctrine-orm

这两个陈述之间是否有任何区别:

$this->getDoctrine()->getEntityManager()->getRepository();

$this->getDoctrine()->getRepository();

差异是否与我错过的任何OOP概念有关?

3 个答案:

答案 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中提供智能感知。希望它有所帮助。