Метод where класса QueryBuilder
Метод where класса QueryBuilder добавляет условие
в секцию WHERE DQL-запроса. Первым параметром передаётся
строка с условием, вторым - необязательное имя параметра
для привязки значения. Метод возвращает сам объект
QueryBuilder, что позволяет строить цепочки вызовов.
Если метод вызывается повторно, новое условие полностью
заменяет предыдущее. Для добавления условий используйте
andWhere и orWhere.
Синтаксис
where($predicates)
Пример
Давайте выберем статьи с идентификатором больше 1:
<?php
namespace App\Controller;
use App\Entity\Article;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
class ArticleController extends AbstractController
{
public function index(EntityManagerInterface $em): Response
{
$qb = $em->createQueryBuilder();
$qb->select('a')
->from(Article::class, 'a')
->where('a.id > :id')
->setParameter('id', 1);
$res = $qb->getQuery()->getResult();
return new Response(count($res));
}
}
?>
Результат выполнения кода:
4
Пример
Давайте выберем статьи с логическим условием по двум полям:
<?php
namespace App\Controller;
use App\Entity\Article;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
class ArticleController extends AbstractController
{
public function index(EntityManagerInterface $em): Response
{
$qb = $em->createQueryBuilder();
$qb->select('a')
->from(Article::class, 'a')
->where('a.id > :id AND a.active = :active')
->setParameter('id', 1)
->setParameter('active', true);
$res = $qb->getQuery()->getResult();
return new Response(count($res));
}
}
?>
Результат выполнения кода:
3
Пример
Давайте используем объект Expr для построения условия:
<?php
namespace App\Controller;
use App\Entity\Article;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
class ArticleController extends AbstractController
{
public function index(EntityManagerInterface $em): Response
{
$qb = $em->createQueryBuilder();
$expr = $qb->expr();
$qb->select('a')
->from(Article::class, 'a')
->where(
$expr->andX(
$expr->gt('a.id', ':id'),
$expr->eq('a.active', ':active')
)
)
->setParameter('id', 1)
->setParameter('active', true);
$res = $qb->getQuery()->getResult();
return new Response(count($res));
}
}
?>
Результат выполнения кода:
3
Смотрите также
-
класс
QueryBuilder,
который строит DQL-запросы в Doctrine -
метод
andWhere,
который добавляет условие через AND -
метод
orWhere,
который добавляет условие через OR -
метод
setParameter,
который привязывает значение к параметру