使用 "Query Builder" 创建一个允许取平均值的函数 - Symfony

Use "Query Builder" to create a function allowing to take the average of values - Symfony

我需要有关在 Symfony 中使用“查询生成器”的帮助。

我想从我的数据库中的一个表 (Avis) 中检索一个属性 (Note) 的值。之后,我想对他的所有分数进行平均,以便在我的网站上显示。

现在我有 SQL 查询,它实现了我想要的:

SELECT AVG(avis.note) AS notetotal FROM avis

但之后,我不明白该怎么做,或者至少不知道“查询生成器”是如何工作的

使用 QueryBuilder,您可以以编程方式逐步构建查询,但它实际上只构建您可以使用 $queryBuilder->getDql() 获得的 DQL。在某些情况下,使用 QueryBuilder 比连接长 DQL 查询字符串更容易。 使用 QueryBuilder 构建查询有两种可能的方法。但在大多数情况下,建议尽可能使用纯 DQL,因为它更具可读性。

首先用 Expr Class

$queryBuilder = $this->getDoctrine()->getManager()->createQueryBuilder('a');
$queryBuilder->select($queryBuilder->expr()->avg('a.note'))
        ->from(Avis::class, 'a');
$avg = $queryBuilder->getQuery()->getSingleResult();

// $avg = [1 => (int) AVG]

或没有 Expr Class

$queryBuilder = $this->getDoctrine()->getManager()->createQueryBuilder('a');
$queryBuilder->select('AVG(a.note) as notetotal')
        ->from(Avis::class, 'a');
$avg = $queryBuilder->getQuery()->getSingleResult();

// $avg = ['notetotal' => (int) AVG]

DQL中也一样

$dql = 'SELECT AVG(a.note) AS notetotal FROM ' . Avis::class . ' a';
$avg = $this->getDoctrine()->getManager()->createQuery($dql)->execute();

// $avg = [0 => ['notetotal' => (int) AVG]]