Метод min класса Expr
Метод min класса Expr создаёт выражение для получения минимального значения из набора значений или поля. Он часто используется в конструкторе запросов Doctrine для поиска наименьшего значения в колонке таблицы. Первым параметром передаётся выражение или строка с именем поля, по которому нужно найти минимум.
Синтаксис
$expr->min($expression)
Пример
Давайте найдём минимальное значение поля price в таблице товаров. Создадим запрос через QueryBuilder и выведем результат:
<?php
namespace App\Repository;
use App\Entity\Product;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\QueryBuilder;
class ProductRepository extends EntityRepository
{
public function findMinPrice(): int
{
$qb = $this->createQueryBuilder('p');
$qb->select($qb->expr()->min('p.price'));
return (int) $qb->getQuery()->getSingleScalarResult();
}
}
?>
Результат выполнения кода:
150
Пример
Давайте найдём минимальное значение среди нескольких выражений. В этом примере сравним два поля price и discountPrice с помощью метода min:
<?php
namespace App\Repository;
use App\Entity\Product;
use Doctrine\ORM\EntityRepository;
class ProductRepository extends EntityRepository
{
public function findMinOfTwoFields(): int
{
$qb = $this->createQueryBuilder('p');
$qb->select($qb->expr()->min('p.price', 'p.discountPrice'));
return (int) $qb->getQuery()->getSingleScalarResult();
}
}
?>
Результат выполнения кода:
120
Пример
Давайте используем метод min вместе с группировкой. Найдём минимальную цену для каждой категории товаров:
<?php
namespace App\Repository;
use App\Entity\Product;
use Doctrine\ORM\EntityRepository;
class ProductRepository extends EntityRepository
{
public function findMinPricePerCategory(): array
{
$qb = $this->createQueryBuilder('p');
$qb->select('p.category', $qb->expr()->min('p.price') . ' AS min_price')
->groupBy('p.category');
return $qb->getQuery()->getArrayResult();
}
}
?>
Результат выполнения кода:
[["category" => "abcde", "min_price" => 100], ["category" => "user", "min_price" => 200]]