Метод andX класса Expr
Метод andX класса Expr объединяет переданные условия
в одно составное условие через логический оператор AND.
Метод принимает произвольное количество аргументов - выражений,
построенных с помощью других методов класса Expr.
Если хотя бы одно из условий окажется ложным, всё составное
условие также будет ложным.
Метод особенно удобен при построении сложных фильтров
в QueryBuilder, когда нужно одновременно проверить
несколько полей сущности.
Синтаксис
andX(...$x)
Пример
Давайте объединим два условия через andX и выведем результат:
<?php
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\Query\Expr;
class ArticleRepository
{
public function __construct(private EntityManagerInterface $em)
{
}
public function findActive(): array
{
$expr = new Expr();
$where = $expr->andX(
$expr->eq('a.status', ':status'),
$expr->gt('a.count', ':count')
);
return $this->em->createQueryBuilder()
->select('a')
->from('App\Entity\Article', 'a')
->where($where)
->setParameter('status', 'active')
->setParameter('count', 5)
->getQuery()
->getResult();
}
}
?>
Пример
Давайте посмотрим, как выглядит итоговое условие, построенное
методом andX:
<?php
use Doctrine\ORM\Query\Expr;
$expr = new Expr();
$where = $expr->andX(
$expr->eq('a.status', ':status'),
$expr->gt('a.count', ':count')
);
echo (string) $where;
?>
Результат выполнения кода:
"a.status = :status AND a.count > :count"
Пример
Давайте объединим три условия, включая проверку на null:
<?php
use Doctrine\ORM\Query\Expr;
$expr = new Expr();
$where = $expr->andX(
$expr->eq('a.status', ':status'),
$expr->isNotNull('a.createdAt'),
$expr->between('a.count', ':min', ':max')
);
echo (string) $where;
?>
Результат выполнения кода:
"a.status = :status AND a.createdAt IS NOT NULL AND a.count BETWEEN :min AND :max"