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()、リポジトリに移動したため、明らかにUserエンティティのメソッドはありません。したがって、このメソッドを呼び出すには、エンティティではなくユーザーリポジトリを取得する必要があります。

したがって、を使用$this->getDoctrine()->getRepository('User')->getCountUnreadAlerts() します。それがまだユーザーエンティティの一部である場合は、「getAlertsReceived()が存在しません...」という別のエラーが発生する可能性もあります。

于 2012-11-16T23:50:38.707 に答える