0

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

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

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

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

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

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

4

1 回答 1

1

当您app.user在模板或$this->container->get('security.context')->getToken()->getUser()控制器中使用时,您得到的是用户实体。很明显,用户实体没有任何getCountUnreadAlerts()方法,因为您将它移到了存储库中。因此,您必须获取用户存储库而不是实体来调用此方法。

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

于 2012-11-16T23:50:38.707 回答