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