我如何在Symfony中使用Propel ORM使用group by子句编写SQL计数?
作者:互联网
如何使用Propel ORM编写以下SQL查询?
SELECT species, COUNT(*) FROM Bird GROUP BY species;
解决方法:
这不是会导致有意义的水合Bird对象的查询,因为您只选择了物种列和那些物种的计数.因此,a “raw” SQL query as Colin suggested可能是到达此处的最佳方式-但不要在最后混水,只需从生成的PDOStatement中获取数据即可.
如果物种是对“物种”表的引用,则可以在此处进行操作:对“物种”对象进行水合处理,并在其中增加一栏,以表示每个物种的鸟类数量.如果您使用版本1.2以下的Symfony,我强烈建议您使用DbFinder plugin,因为它极大地简化了使用Criteria的工作,并且具有选择单个补充列的方法:
$speciesQuery = DbFinder::from('Species')->
join('Bird')->
groupBy('Bird.Id')->
withColumn('COUNT(Bird.Id)', 'NbBirds');
foreach ($speciesQuery->find() as $species) {
echo $species->getName() . ": " . $species->getNbBirds() . " birds\n";
}
如果您使用Symfony 1.3或1.4,则应将捆绑的Propel 1.4升级到Propel 1.5,DbFinder的创建者FrançoisZaniotto移植了其许多功能并添加了更多功能,因此上述代码在Propel 1.5中有效,而没有额外的插件.
标签:propel,symfony1,sql,php 来源: https://codeday.me/bug/20191210/2102935.html