Класс Expr
Класс Expr находится в пространстве имён
Doctrine\ORM\Query\Expr и предоставляет
набор методов для построения частей DQL-запросов
через QueryBuilder. С его помощью удобно
составлять условия WHERE, HAVING
и другие выражения, не прибегая к ручному
написанию строк. Экземпляр класса доступен через
метод expr у QueryBuilder.
Синтаксис
$qb->expr()->method(args)
Пример
Давайте построим условие равенства для поля
status сущности Article:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
class ArticleRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Article::class);
}
public function findByStatus(string $status): array
{
$qb = $this->createQueryBuilder('a');
$expr = $qb->expr()->eq('a.status', ':status');
$qb->where($expr)
->setParameter('status', $status);
return $qb->getQuery()->getResult();
}
}
?>
Результат выполнения кода для статуса 'active':
["article", "abcde"]
Пример
Давайте объединим несколько условий с помощью
метода andX:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
class ArticleRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Article::class);
}
public function findActiveByTitle(string $title): array
{
$qb = $this->createQueryBuilder('a');
$expr = $qb->expr()->andX(
$qb->expr()->eq('a.status', ':status'),
$qb->expr()->like('a.title', ':title')
);
$qb->where($expr)
->setParameter('status', 'active')
->setParameter('title', '%' . $title . '%');
return $qb->getQuery()->getResult();
}
}
?>
Результат выполнения кода для заголовка 'user':
["user"]