[Doctrine2]如何计算“帖子”的“评论”中“喜欢”的数量

时间:2015-09-01 18:27:19

标签: php database symfony doctrine social-networking

我正在为自己的社交网络苦苦挣扎,我正试图根据他们喜欢的数量对帖子的评论进行排序。 所以我制作了三张桌子:一篇有很多评论的帖子和一篇评论很多赞。当然,有一个User表可以处理所有这些。

public function loadProfilePost($user, $first = 0, $limit = 0)
{
    $q =    $this->_em->createQueryBuilder()
            ->select('post, comment')
            ->from('EvoSocialBundle:Post', 'post')
            ->leftJoin('post.comments', 'comment')
            ->where('post.user = :user')
            ->setParameter(':user', $user)
            ->addOrderBy('post.created', 'DESC');

    $q->setFirstResult($first);
    if($limit > 0)
        $q->setMaxResults($limit);

    return $q->getQuery()->getResult();
}

1 个答案:

答案 0 :(得分:1)

要根据喜欢的数量对评论进行排序,您可以在查询构建器中添加一个与喜欢实体相关联的联接,然后按group by post.id,comments.id之类的条件设置分组,我添加了addSelect()计数功能来计算喜欢评论并设置count AS HIDDEN的结果,以便它们不会与结果集一起返回,并且只会影响查询构建器部分

public function loadProfilePost($user, $first = 0, $limit = 0)
{
    $q =    $this->_em->createQueryBuilder()
            ->select('p, c')
            ->addSelect('COUNT(DISTINCT  c.id) AS HIDDEN total_likes')
            ->from('EvoSocialBundle:Post', 'p')
            ->leftJoin('p.comments', 'c')
            ->leftJoin('c.likes', 'l')
            ->where('p.user = :user')
            ->setParameter(':user', $user)
            ->groupBy('p.id')
            ->addGroupBy('c.id')
            ->orderBy('total_likes','DESC');

    $q->setFirstResult($first);
    if($limit > 0)
        $q->setMaxResults($limit);

    return $q->getQuery()->getResult();
}
相关问题