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

Метод andWhere

Метод andWhere класса QueryBuilder добавляет новое условие в WHERE-часть DQL-запроса, объединяя его с предыдущими условиями через логический оператор AND. Первым параметром передаётся строка с условием, вторым (необязательным) - имя параметра для привязки значения через setParameter. Метод возвращает тот же объект QueryBuilder, что позволяет выстраивать цепочку вызовов.

Синтаксис

$qb->andWhere(string $predicates)

Пример

Давайте создадим запрос, который выбирает статьи с id больше 1 и статусом 'active':

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

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

[ ["id" => 2, "status" => "active", "title" => "article"], ["id" => 3, "status" => "active", "title" => "hello"] ]

Пример

Давайте добавим несколько условий через andWhere для фильтрации по дате и булевому полю:

<?php namespace App\Repository; use App\Entity\Article; use Doctrine\ORM\EntityRepository; class ArticleRepository extends EntityRepository { public function findPublished(): array { $qb = $this->createQueryBuilder('a'); $qb->where('a.published = :published') ->andWhere('a.createdAt > :date') ->andWhere('a.text IS NOT NULL') ->setParameter('published', true) ->setParameter('date', new \DateTime('2024-01-01')); return $qb->getQuery()->getResult(); } } ?>

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

[ ["id" => 1, "published" => true, "text" => "abcde"], ["id" => 4, "published" => true, "text" => "article"] ]

Пример

Давайте используем andWhere вместе с методом orWhere для построения сложного условия:

<?php namespace App\Repository; use App\Entity\Article; use Doctrine\ORM\EntityRepository; class ArticleRepository extends EntityRepository { public function search(string $term): array { $qb = $this->createQueryBuilder('a'); $qb->where('a.title = :term') ->orWhere('a.text = :term') ->andWhere('a.published = :published') ->setParameter('term', $term) ->setParameter('published', true); return $qb->getQuery()->getResult(); } } ?>

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

[ ["id" => 3, "title" => "hello", "published" => true] ]

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

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