复合表加入(Doctrine ORM)

时间:2016-05-22 14:41:14

标签: php doctrine-orm

我有以下表结构来发布活动(Facebook Like功能):

用户: id,firstname,lastname

KickPointAction: id,user_id,post_id,timestamp

发布: id,user_id,text,timestamp

如果有人喜欢Post,则会在KickPointAction中创建一个引用目标帖子的条目。我现在需要获得一个排行榜来计算用户有多少喜欢。

这是当前的代码,但是:

        $allUsers = $this->getObjectManager()->getRepository('Db\Entity\User')->findAll();
    $usersArray = array();
    foreach($allUsers as $user) {
        $usersArray[] = $this->getObjectManager()->createQueryBuilder()
            ->select('u.firstname, u.lastname, u.id AS userid, u.avatarUri, COUNT(u) AS total_kickpoints')
            ->from('Db\Entity\User', 'u')
            ->innerJoin(
                'Db\Entity\Post',
                'p',
                Join::WITH,
                'u.id= p.user'
            )
            ->innerJoin(
                'Db\Entity\KickPointToPost',
                'k',
                Join::WITH,
                'k.post=p.id'
            )
            ->andwhere('p.user = :user')
            ->setParameter('user', $user)
            ->getQuery()
            ->getResult()[0];
    }

我认为这不是获得排行榜的最佳方式。是否有其他可用的解决方案,可能是从Users表开始的正确连接?

0 个答案:

没有答案