Метод setParameter класса Query
Метод setParameter класса Query
привязывает значение к параметру запроса.
Первым параметром передаётся имя или номер
параметра, вторым - его значение. Третьим
необязательным параметром задаётся тип данных.
Метод возвращает сам объект Query,
что позволяет строить цепочки вызовов.
Синтаксис
$query->setParameter(key, value, type);
Пример
Давайте создадим запрос, который выбирает
статью по её id, и привяжем значение
к именованному параметру:
<?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 show(EntityManagerInterface $em): Response
{
$dql = 'SELECT a FROM App\Entity\Article a WHERE a.id = :id';
$query = $em->createQuery($dql);
$query->setParameter('id', 1);
$res = $query->getOneOrNullResult();
return new Response($res->getTitle());
}
}
?>
Результат выполнения кода:
"article"
Пример
Давайте привяжем сразу несколько параметров цепочкой вызовов и ограничим выборку:
<?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 list(EntityManagerInterface $em): Response
{
$dql = 'SELECT a FROM App\Entity\Article a WHERE a.status = :status AND a.views > :views';
$query = $em->createQuery($dql);
$query->setParameter('status', 'published');
$query->setParameter('views', 10);
$res = $query->getResult();
return new Response((string) count($res));
}
}
?>
Результат выполнения кода:
"3"
Пример
Давайте укажем третий параметр - тип данных
datetime для корректной привязки даты:
<?php
namespace App\Controller;
use App\Entity\Article;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
class ArticleController extends AbstractController
{
public function recent(EntityManagerInterface $em): Response
{
$dql = 'SELECT a FROM App\Entity\Article a WHERE a.createdAt > :date';
$query = $em->createQuery($dql);
$query->setParameter('date', new \DateTime('2024-01-01'), Types::DATETIME_MUTABLE);
$res = $query->getResult();
return new Response((string) count($res));
}
}
?>
Результат выполнения кода:
"5"
Смотрите также
-
класс
Query,
который представляет DQL-запрос -
метод
getResult,
который возвращает массив результатов -
метод
getOneOrNullResult,
который возвращает одну запись или null -
метод
getSingleScalarResult,
который возвращает одно скалярное значение