作为Symfony2的新手&我正在苦苦挣扎(在自定义存储库类中),getEntityManager()
和getManager()
之间存在差异。
我知道getEntityManager()
已被弃用但如果我使用getManager()
,我会得到“未定义方法'getManager'。方法名称必须以findBy或findOneBy开头!”
在我的课程中,以下代码有效:
public function haalidop($verbid)
{
return $this->getEntityManager()
->createQuery('SELECT p FROM myBundle:Verbs p WHERE p.verbid='.$verbid)
->getSingleResult();
}
如果我改变(升级?),就像下面的代码一样,我收到错误......
public function haalidop($verbid)
{
return $this->getManager()
->createQuery('SELECT p FROM myBundle:Verbs p WHERE p.verbid='.$verbid)
->getSingleResult();
}
有人建议这里有什么问题吗?
答案 0 :(得分:12)
getEntityManager
的Registry
方法已弃用。由于您在存储库中,因此不是扩展注册表而是扩展 EntityRepository
。该类只有getEntityManager
方法,不推荐使用。
这种不一致的原因很简单:注册表也可以用于其他Doctrine库,就像它们的ODM一样。它们不使用名称“Entity”,而是使用“Document”。出于这个原因,使用getEntityManager
对ODM没有多大意义,这就是为什么他们改为getManager
。
另一方面,EntityRepository
- 其名称已经告诉我们 - 是特定于ORM的,这意味着ODM用户没有混淆(他们使用另一个存储库类)。
答案 1 :(得分:1)
getEntityManager
方法在存储库中仍然有效,您可以在current docs中看到。虽然在控制器中已弃用,但应使用getManager
方法。
答案 2 :(得分:-1)
如果在控制器中:
$this->get('doctrine')->getManager();
如果在服务中:
$this->container->get('doctrine')->getManager();