Symfony2 / Doctrine2如何将函数从Entity移动到Repository

时间:2012-11-16 23:18:31

标签: symfony annotations doctrine-orm repository

我的实体(User.php)中有一个函数可以为用户计算未读警报:

public function getCountUnreadAlerts()
{
    $countUnread = 0;
    $alerts = $this->getAlertsReceived();
    foreach ($alerts as $alert)
    {
        if (!$alert->getReadbyreceiver())
        {
            $countUnread ++;
        }
    }
    return $countUnread;
}

它运行正常,我可以在控制器中使用getCountUnreadAlerts()函数,在twig模板中使用app.user.getCountUnreadAlerts。 一切都很好,但我的理解是,这样的功能不应该真正成为实体的一部分,更好地放在存储库中?

我的用户实体设置了Annotations以指向我的UserRepository ...

* @ORM\Entity(repositoryClass="MyCompany\BlogBundle\Repository\UserRepository")

我的问题是,如何将该功能移动到我的UserRepository.php中? 到目前为止我的尝试(将函数直接粘贴到UserRepository)导致错误消息说方法“getCountUnreadAlerts”不存在。

1 个答案:

答案 0 :(得分:1)

在模板中使用app.user或在控制器中使用$this->container->get('security.context')->getToken()->getUser()时,您获得的是用户实体。显然,User实体没有getCountUnreadAlerts()方法,因为您将其移动到存储库。因此,您需要使用User Repository而不是Entity来调用此方法。

然后使用$this->getDoctrine()->getRepository('User')->getCountUnreadAlerts() 如果它仍然是用户实体的一部分,你可能还会得到另一个错误“getAlertsReceived()不存在......”。