Doctrine 2 translate将计数SQL查询连接到DQL

时间:2013-10-09 11:30:06

标签: doctrine-orm dql

我有两个实体,视频和投票。投票与视频有多对一的关系,但视频与投票无关。我正在尝试检索按投票数排序的视频列表。

以下SQL可以帮助我获得我想要的东西:

SELECT video.*, COUNT(video_id) AS vote_count
    FROM video
    LEFT JOIN vote ON vote.video_id = video.id
    GROUP BY video.id
    ORDER BY vote_count DESC;

我正在尝试使用DQL实现类似的功能,但到目前为止还没有运气:

SELECT vid.name, COUNT(vote.video_id) as vote_count
    FROM VideoVote\Video\Video vid
    JOIN vote.video vid
    GROUP BY video.id
    ORDER BY vote_count DESC

2 个答案:

答案 0 :(得分:0)

无法完成,因为......视频与投票没有关系。所以你的选择是

  1. 使双向关系(我会选择这个)。没有对数据库的惩罚,PHP的额外开销。 (测试性能以确定它是否适合您)。
  2. 使用本机SQL查询并使用结果集映射。

答案 1 :(得分:0)

谢谢Flip。一旦我从视频到投票添加了一对多关联,以下DQL就可以工作:

SELECT vid, COUNT(vote.id) AS HIDDEN vote_count
    FROM VideoVote\Video\Video vid
    LEFT JOIN vid.votes vote
    GROUP BY vid.id
    ORDER BY vote_count DESC