我的实体(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”不存在。
答案 0 :(得分:1)
在模板中使用app.user
或在控制器中使用$this->container->get('security.context')->getToken()->getUser()
时,您获得的是用户实体。显然,User实体没有getCountUnreadAlerts()
方法,因为您将其移动到存储库。因此,您需要使用User Repository而不是Entity来调用此方法。
然后使用$this->getDoctrine()->getRepository('User')->getCountUnreadAlerts()
如果它仍然是用户实体的一部分,你可能还会得到另一个错误“getAlertsReceived()不存在......”。