getManager导致错误,getEntityManager工作正常吗?

时间:2014-02-12 22:41:49

标签: symfony doctrine repository

作为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();
    }

有人建议这里有什么问题吗?

3 个答案:

答案 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();