所以我看过很多关于我的问题的主题(每组最多一次),但是似乎我无法使其与queryBuilder一起使用! (例如:post)
我正在运行symfony 4.2.2
------------- -------------
News Taxonomy
------------- -------------
id id
title name
category (ManyToOne Taxonomy) value
status (ManyToOne Taxonomy)
publication_date
类别可以采用以下值:技术/体育/游戏..依此类推。
状态可以采用以下值:草稿/计划的/已发布。
在我的使用queryBuilder的NewsRepository中,我想返回每个类别的最新最新发布的新闻。
return $this->createQueryBuilder('a')
->select('n news', 'n.publicationDate pubDate')
->leftJoin('n.category', 'c')
->addSelect('c.value category')
->leftJoin('n.status', 's')
->addSelect('s.value status')
->andWhere('s.value = :st')
->setParameter('st', Taxonomy::WORKFLOW_PUBLISHED)
->orderBy('n.category, n.datePublication', 'DESC')
->getQuery()
->getResult();
Taxonomy :: WORKFLOW_PUBLISHED是存储:“已发布”的类常量
然后在服务中,我只是迭代以前方法返回的结果,并提取每个类别的最新新闻。
我不喜欢这种临时解决方案,因此,如果有人可以帮助我使用queryBuilder,那就太好了!
我尝试了groupby的类别,但没有返回最新值。
如果可能的话,我也在寻找良好的性能。
答案 0 :(得分:0)
由于group by不关心数据的顺序,因此您无法通过一个查询来做到这一点。
最好使用按类别分组并选择max(n.id) 然后再进行查询以通过这些ID查找相关新闻
答案 1 :(得分:0)
您是否在查询或表单中尝试过groupBy?
也许表单中的“ group_by”选项可以完成此任务:
'query_builder' => function(NewsRepository $r)use($options)
{
return $r->yourQuery($options['opt']);
},
'group_by' => function(News $news)
{
return $news->getCategory()->getName();
},
我的意思是,如果您在查询中使用orderBy来获取最新新闻,并按类别名称在表单中使用“ group_by”,那么它将起作用。
通过query_builder获取订单,最后使用表格中的group_by选项进行排序。
答案 2 :(得分:0)
如果您看到原始的post: Doctrine Query Language get Max/Latest Row Per Group,则需要对0xE0,
0x24,
0x7A,
0x73
实体进行自我联接,以便组织所需的数据(每个类别的最新新闻),在对原始帖子进行调整之后,您的查询构建器可能会看起来像喜欢
News