如何使用 Propel ORM 编写以下 SQL 查询?
SELECT species, COUNT(*) FROM Bird GROUP BY species;
最佳答案
这不是一个会产生有意义的水化 Bird
对象的查询,因为您只选择了 species
列和这些物种的数量。所以 a "raw" SQL query as Colin suggested 可能是到达此处的最佳方式 - 但最后不要水化,只需从生成的 PDOStatement
中获取数据即可。
如果 species
是对 Species
表的引用,您可以从那里开始工作:hydrate Species
对象,为每个物种的鸟类数量。如果您使用 Symfony 到 1.2 版,我强烈推荐 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çois Zaniotto 移植了它的大部分功能并添加了更多功能,因此上面的代码可以在 Propel 1.5 中运行而无需额外的插件。
关于php - 如何在 Symfony 中使用 Propel ORM 编写带有 group by 子句的 SQL 计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/933473/