РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
53 of 258 menu

Метод expr

Метод expr класса QueryBuilder возвращает объект ExpressionBuilder. Этот объект позволяет строить сложные логические выражения для методов where, andWhere, orWhere, having и andHaving. Параметров метод не принимает. Выражения создаются через методы eq, neq, gt, lt, gte, lte, like, in, notIn, isNull, isNotNull, andX, orX и другими.

Синтаксис

$expr = $qb->expr();

Пример

Давайте построим запрос с условием равенства через expr и eq:

<?php namespace App\Repository; use App\Entity\Article; use Doctrine\ORM\EntityRepository; class ArticleRepository extends EntityRepository { public function findByStatus(string $status): array { $qb = $this->createQueryBuilder('a'); $qb->where( $qb->expr()->eq('a.status', ':status') ); $qb->setParameter('status', $status); return $qb->getQuery()->getResult(); } } ?>

Результат выполнения кода для статуса 'active':

[["id" => 1, "status" => "active"], ["id" => 2, "status" => "active"]]

Пример

Давайте объединим два условия через andX и gt:

<?php namespace App\Repository; use App\Entity\Article; use Doctrine\ORM\EntityRepository; class ArticleRepository extends EntityRepository { public function findActiveWithViews(int $views): array { $qb = $this->createQueryBuilder('a'); $qb->where( $qb->expr()->andX( $qb->expr()->eq('a.status', ':status'), $qb->expr()->gt('a.views', ':views') ) ); $qb->setParameter('status', 'active'); $qb->setParameter('views', $views); return $qb->getQuery()->getResult(); } } ?>

Результат выполнения кода для $views = 100:

[["id" => 1, "status" => "active", "views" => 150], ["id" => 3, "status" => "active", "views" => 200]]

Пример

Давайте построим условие с like для поиска по тексту:

<?php namespace App\Repository; use App\Entity\Article; use Doctrine\ORM\EntityRepository; class ArticleRepository extends EntityRepository { public function searchByTitle(string $query): array { $qb = $this->createQueryBuilder('a'); $qb->where( $qb->expr()->like('a.title', ':query') ); $qb->setParameter('query', '%' . $query . '%'); return $qb->getQuery()->getResult(); } } ?>

Результат выполнения кода для $query = 'article':

[["id" => 1, "title" => "article one"], ["id" => 2, "title" => "article two"]]

Смотрите также

  • класс QueryBuilder,
    который строит DQL-запросы
  • метод where,
    который задаёт основное условие запроса
  • метод andWhere,
    который добавляет условие через AND
  • метод setParameter,
    который привязывает значение к параметру
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить