Метод setParameters класса QueryBuilder
Метод setParameters класса QueryBuilder
устанавливает сразу несколько параметров запроса
одним вызовом. Первым параметром передаётся
ассоциативный массив, где ключи - это имена
параметров, а значения - их величины. Метод
возвращает тот же объект QueryBuilder,
что позволяет использовать цепочку вызовов.
Параметры можно задавать как позиционно, передавая массив с числовыми ключами, так и по именам. Этот метод удобен, когда в запросе используется несколько плейсхолдеров и нужно задать их значения за один раз.
Синтаксис
setParameters(array $params)
Пример
Давайте создадим запрос с двумя именованными параметрами
и установим их через setParameters:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\ORM\EntityRepository;
class ArticleRepository extends EntityRepository
{
public function findByTitleAndStatus(string $title, bool $active): array
{
$qb = $this->createQueryBuilder('a');
$qb->select('a')
->where('a.title = :title')
->andWhere('a.active = :active')
->setParameters([
'title' => $title,
'active' => $active,
]);
return $qb->getQuery()->getResult();
}
}
?>
Пример
Давайте установим позиционные параметры через
setParameters с числовыми ключами:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\ORM\EntityRepository;
class ArticleRepository extends EntityRepository
{
public function findByRange(int $min, int $max): array
{
$qb = $this->createQueryBuilder('a');
$qb->select('a')
->where('a.id > ?1')
->andWhere('a.id < ?2')
->setParameters([1 => $min, 2 => $max]);
return $qb->getQuery()->getResult();
}
}
?>
Пример
Давайте посмотрим, как получить DQL-запрос после установки параметров:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\ORM\EntityRepository;
class ArticleRepository extends EntityRepository
{
public function getDqlWithParams(): string
{
$qb = $this->createQueryBuilder('a');
$qb->select('a')
->where('a.title = :title')
->andWhere('a.active = :active')
->setParameters([
'title' => 'abcde',
'active' => true,
]);
return $qb->getDQL();
}
}
?>
Результат выполнения метода:
"SELECT a FROM App\Entity\Article a WHERE a.title = :title AND a.active = :active"
Смотрите также
-
класс
QueryBuilder,
который строит DQL-запросы -
метод
setParameter,
который устанавливает один параметр запроса -
метод
where,
который задаёт условие выборки -
метод
getDQL,
который возвращает текст DQL-запроса