РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
66 of 258 menu

Метод execute класса Query

Метод execute класса Query запускает на выполнение DQL-запрос, который был построен через EntityManager. Первым параметром можно передать массив параметров для подстановки в запрос. Вторым параметром передаётся режим гидрации - способ преобразования результатов запроса в PHP-структуры. Если параметры не переданы, используются значения, заданные через setParameter.

Синтаксис

$res = $query->execute(parameters, hydrationMode);

Пример

Давайте выполним простой запрос, который вернёт все записи из таблицы article:

<?php namespace AppController; use AppEntityArticle; use DoctrineORMEntityManagerInterface; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/articles', name: 'article_list')] public function list(EntityManagerInterface $em): Response { $query = $em->createQuery('SELECT a FROM AppEntityArticle a'); $res = $query->execute(); foreach ($res as $article) { echo $article->getTitle(); } return new Response(''); } } ?>

Результат выполнения кода:

"abcde"

Пример

Давайте передадим параметр напрямую в метод execute:

<?php namespace AppController; use AppEntityArticle; use DoctrineORMEntityManagerInterface; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article/{id}', name: 'article_show')] public function show(int $id, EntityManagerInterface $em): Response { $query = $em->createQuery('SELECT a FROM AppEntityArticle a WHERE a.id = :id'); $res = $query->execute(['id' => $id]); $article = $res[0] ?? null; if ($article === null) { return new Response('not found'); } return new Response($article->getTitle()); } } ?>

Результат выполнения кода для адреса /article/1:

"abcde"

Пример

Давайте передадим вторым параметром режим гидрации, чтобы получить результат в виде обычных массивов:

<?php namespace AppController; use AppEntityArticle; use DoctrineORMEntityManagerInterface; use DoctrineORMQuery; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/articles-array', name: 'article_array')] public function arrayList(EntityManagerInterface $em): Response { $query = $em->createQuery('SELECT a.title, a.text FROM AppEntityArticle a'); $res = $query->execute([], Query::HYDRATE_ARRAY); foreach ($res as $row) { echo $row['title'] . ' - ' . $row['text']; } return new Response(''); } } ?>

Результат выполнения кода:

"abcde - article"

Пример

Давайте используем скалярную гидрацию для получения одного значения:

<?php namespace AppController; use AppEntityArticle; use DoctrineORMEntityManagerInterface; use DoctrineORMQuery; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/articles/count', name: 'article_count')] public function count(EntityManagerInterface $em): Response { $query = $em->createQuery('SELECT COUNT(a.id) FROM AppEntityArticle a'); $res = $query->execute([], Query::HYDRATE_SINGLE_SCALAR); return new Response((string) $res); } } ?>

Результат выполнения кода:

"5"

Смотрите также

  • класс Query,
    который представляет собой DQL-запрос
  • метод getResult,
    который возвращает результат запроса
  • метод setParameter,
    который задаёт параметр для запроса
  • метод setHydrationMode,
    который задаёт режим гидрации результата
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить