使用 "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]]
我需要有关在 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]]