Класс Query
Класс Query представляет собой DQL-запрос
в Doctrine ORM. Объект класса создаётся через
метод createQuery у EntityManager.
Первым параметром передаётся строка DQL-запроса.
Класс позволяет задать параметры через setParameter,
ограничить выборку методами setMaxResults и
setFirstResult, а также выполнить запрос
методами getResult, getOneOrNullResult,
getSingleResult, getSingleScalarResult,
getArrayResult, getScalarResult.
Синтаксис
$query = $entityManager->createQuery($dql);
$query->setParameter($key, $value);
$res = $query->getResult();
Пример
Давайте создадим DQL-запрос и получим все статьи:
<?php
namespace AppController;
use AppEntityArticle;
use DoctrineORMEntityManagerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
class ArticleController extends AbstractController
{
public function index(EntityManagerInterface $em): Response
{
$query = $em->createQuery('SELECT a FROM AppEntityArticle a');
$res = $query->getResult();
return new Response(count($res));
}
}
?>
Результат выполнения кода:
5
Пример
Давайте передадим параметр в запрос через setParameter:
<?php
namespace AppController;
use AppEntityArticle;
use DoctrineORMEntityManagerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
class ArticleController extends AbstractController
{
public function user(EntityManagerInterface $em): Response
{
$query = $em->createQuery('SELECT a FROM AppEntityArticle a WHERE a.title = :title');
$query->setParameter('title', 'hello');
$res = $query->getResult();
return new Response(count($res));
}
}
?>
Результат выполнения кода:
1
Пример
Давайте ограничим выборку через setMaxResults и setFirstResult:
<?php
namespace AppController;
use AppEntityArticle;
use DoctrineORMEntityManagerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
class ArticleController extends AbstractController
{
public function list(EntityManagerInterface $em): Response
{
$query = $em->createQuery('SELECT a FROM AppEntityArticle a ORDER BY a.id ASC');
$query->setMaxResults(2);
$query->setFirstResult(1);
$res = $query->getResult();
return new Response(count($res));
}
}
?>
Результат выполнения кода:
2
Пример
Давайте получим одно скалярное значение через getSingleScalarResult:
<?php
namespace AppController;
use AppEntityArticle;
use DoctrineORMEntityManagerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
class ArticleController extends AbstractController
{
public function count(EntityManagerInterface $em): Response
{
$query = $em->createQuery('SELECT COUNT(a.id) FROM AppEntityArticle a');
$res = $query->getSingleScalarResult();
return new Response($res);
}
}
?>
Результат выполнения кода:
5
Смотрите также
-
метод
getResult,
который возвращает результат запроса в виде массива объектов -
метод
getOneOrNullResult,
который возвращает один объект или null -
метод
getSingleScalarResult,
который возвращает одно скалярное значение -
метод
setParameter,
который задаёт параметр DQL-запроса