Метод 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,
который привязывает значение к параметру