Doctrine2,通过多对多属性的计数获得实体顺序 [英] Doctrine2 , get entities order by count of a many to many property
本文介绍了Doctrine2,通过多对多属性的计数获得实体顺序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有两个实体
- 文章
- 用户
文章与名为"likedByUsers"的用户有关
Article has a relation to user named 'likedByUsers'
现在,我想按喜欢的次数来排序文章,但是:
Now, I would like to get the articles order by number of likes, but:
- 我不想拥有'numberOfLikes'属性,因为要更新它太麻烦了
- 我有太多的文章(100k +)对PHP方面的排序"来说是不现实的(事实上,我们达到进行排序的极限是我问这个问题的原因)
- 我可以忍受在返回的值中没有得到点赞的次数(因为序列化程序稍后会对其进行水化处理)
我目前所拥有的是:
$builder = $this->createQueryBuilder('a');
->select('COUNT(u) AS nbrLikes')
->leftJoin('a.likedByUsers', 'u')
->orderBy('nbrLikes', 'DESC')
->groupBy('a.id')
->getQuery()
->getResult()
;
这将正确返回喜欢"次数(对于没有喜欢"的文章,则为0),但不会返回文章"本身
this correctly returns the number of likes (with 0 for articles without likes), but it does NOT return the Articles themselves
我尝试添加
->select('a, COUNT(u) AS HIDDEN nbrLikes')
但失败,因为 a
不属于 GROUP BY
有什么想法吗?
推荐答案
如果要选择多个"值,则需要在查询生成器的select方法中指定它们.就像下面的报道
If you want to select "multiple" values you need to specify them into select method of query builder. Just like reported below
$builder = $this->createQueryBuilder('a')
->select('COUNT(u) AS HIDDEN nbrLikes', 'a.id')
->leftJoin('a.likedByUsers', 'u')
->orderBy('nbrLikes', 'DESC')
->groupBy('a.id')
->getQuery()
->getResult();
您必须记住,结果将不是一个实体,而是一个关联数组
You have to remember that result will not be an entity but an associative array
如果您想要完整的实体
$builder = $this->createQueryBuilder('a')
->select('COUNT(u) AS HIDDEN nbrLikes', 'a')
->leftJoin('a.likedByUsers', 'u')
->orderBy('nbrLikes', 'DESC')
->groupBy('a')
->getQuery()
->getResult();
这篇关于Doctrine2,通过多对多属性的计数获得实体顺序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文