Метод setParameter
Метод setParameter класса QueryBuilder
привязывает значение к именованному параметру,
который был использован в запросе через :name.
Первым параметром передаётся имя параметра,
вторым - его значение. Третий необязательный
параметр задаёт тип данных Doctrine.
Синтаксис
$qb->setParameter($key, $value, $type = null);
Пример
Давайте создадим запрос с именованным параметром
и привяжем к нему значение 'abcde':
<?php
namespace AppController;
use AppRepositoryArticleRepository;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(ArticleRepository $repo): Response
{
$qb = $repo->createQueryBuilder('a');
$qb->select('a')
->where('a.title = :title')
->setParameter('title', 'abcde');
$res = $qb->getQuery()->getResult();
return new Response((string) count($res));
}
}
?>
Результат выполнения кода:
"1"
Пример
Давайте привяжем несколько параметров
для диапазона значений integer:
<?php
namespace AppController;
use AppRepositoryArticleRepository;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article/range', name: 'article_range')]
public function range(ArticleRepository $repo): Response
{
$qb = $repo->createQueryBuilder('a');
$qb->select('a')
->where('a.id > :min')
->andWhere('a.id < :max')
->setParameter('min', 1)
->setParameter('max', 5);
$res = $qb->getQuery()->getResult();
return new Response((string) count($res));
}
}
?>
Результат выполнения кода:
"3"
Пример
Давайте явно укажем тип данных datetime
для параметра:
<?php
namespace AppController;
use AppRepositoryArticleRepository;
use DoctrineDBALTypesTypes;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article/date', name: 'article_date')]
public function byDate(ArticleRepository $repo): Response
{
$qb = $repo->createQueryBuilder('a');
$qb->select('a')
->where('a.createdAt > :date')
->setParameter('date', new DateTime('2024-01-01'), Types::DATETIME_MUTABLE);
$res = $qb->getQuery()->getResult();
return new Response((string) count($res));
}
}
?>
Результат выполнения кода:
"2"
Смотрите также
-
класс
QueryBuilder,
который строит DQL-запросы Doctrine -
метод
setParameters,
который устанавливает сразу несколько параметров -
метод
where,
который задаёт условие выборки -
метод
getQuery,
который возвращает готовый объект Query