php - 如何在 Symfony 中使用 Propel ORM 编写带有 group by 子句的 SQL 计数?

标签 php sql symfony1 propel

如何使用 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/

相关文章:

php - Eloquent 获取最近 3 小时内的记录

PHP 7.2 mysqli 无法使用没有 SSL 的身份验证插件 sha256_password 连接到 MySQL

php - 从 MySQL 获取数据的更有效方法

mysql - SQL:如何在 Sql 中使用条件 AND 和 OR

php - 第 10 行 C : mysql_result() expects parameter 1 to be resource, php 中给出的警告 :\wamp\www\Bitev3\core\functions\users. boolean 值

sql - 用于选择新的 JPA 标准查询 API

android - SQL计数 从GOB开始的顺序

PHP ORMs : Doctrine vs. 推进

php - 使用 Symfony/Doctrine 的 Memcache 正在重新加载数据

php - 升级PHP系统中现有的数据库