数据库
首页 > 数据库> > 我如何在Symfony中使用Propel ORM使用group by子句编写SQL计数?

我如何在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