Метод avg класса Expr
Метод avg класса Expr создаёт выражение для вычисления
среднего арифметического значений указанного поля.
Первым параметром передаётся имя поля (или алиас поля) сущности,
по которому нужно посчитать среднее значение.
Метод обычно используется внутри функции select конструктора
запросов QueryBuilder вместе с методом setParameter,
если в выражение подставляется параметр.
Синтаксис
avg(field)
Пример
Давайте посчитаем среднее значение поля integer для всех
записей сущности Article:
<?php
namespace AppController;
use AppEntityArticle;
use DoctrineORMEntityManagerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
class ArticleController extends AbstractController
{
public function index(EntityManagerInterface $em): Response
{
$res = $em->createQueryBuilder()
->select('avg(a.integer) as avg_value')
->from(Article::class, 'a')
->getQuery()
->getSingleScalarResult();
return new Response((string) $res);
}
}
?>
Результат выполнения кода:
"3"
Пример
Давайте посчитаем среднее значение с помощью метода avg
класса Expr и вернём результат в виде массива:
<?php
namespace AppController;
use AppEntityArticle;
use DoctrineORMEntityManagerInterface;
use DoctrineORMQueryExpr;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
class ArticleController extends AbstractController
{
public function index(EntityManagerInterface $em): Response
{
$expr = new Expr();
$res = $em->createQueryBuilder()
->select($expr->avg('a.integer'))
->from(Article::class, 'a')
->getQuery()
->getResult();
return new Response(json_encode($res));
}
}
?>
Результат выполнения кода:
[{"1":"3"}]
Пример
Давайте посчитаем среднее значение поля integer
только для записей, у которых поле boolean равно true:
<?php
namespace AppController;
use AppEntityArticle;
use DoctrineORMEntityManagerInterface;
use DoctrineORMQueryExpr;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
class ArticleController extends AbstractController
{
public function index(EntityManagerInterface $em): Response
{
$expr = new Expr();
$res = $em->createQueryBuilder()
->select($expr->avg('a.integer'))
->from(Article::class, 'a')
->where($expr->eq('a.boolean', ':flag'))
->setParameter('flag', true)
->getQuery()
->getSingleScalarResult();
return new Response((string) $res);
}
}
?>
Результат выполнения кода:
"4"