Метод getScalarResult
Метод getScalarResult класса Query
выполняет DQL-запрос и возвращает результат
в виде плоского массива скалярных значений.
Каждая строка результата представляет собой
ассоциативный массив, где ключами являются
имена выбранных полей, а значениями - сами
скалярные значения. Метод не принимает
параметров и возвращает массив.
Этот метод удобен, когда нужно получить
только отдельные поля сущности, а не целые
объекты. Он работает быстрее, чем getResult,
поскольку не выполняет гидр��цию в объекты.
Синтаксис
public function getScalarResult(): array
Пример
Давайте получим список статей с их заголовками:
<?php
namespace App\Controller;
use App\Entity\Article;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/articles', name: 'article_list')]
public function list(EntityManagerInterface $em): Response
{
$query = $em->createQuery(
'SELECT a.title, a.text FROM App\Entity\Article a'
);
$res = $query->getScalarResult();
return new Response(json_encode($res));
}
}
?>
Результат выполнения кода:
[
{"title": "article 1", "text": "text 1"},
{"title": "article 2", "text": "text 2"},
{"title": "article 3", "text": "text 3"}
]
Пример
Давайте получим только идентификаторы и заголовки статей:
<?php
namespace App\Controller;
use App\Entity\Article;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/articles/ids', name: 'article_ids')]
public function ids(EntityManagerInterface $em): Response
{
$query = $em->createQuery(
'SELECT a.id, a.title FROM App\Entity\Article a'
);
$res = $query->getScalarResult();
return new Response(json_encode($res));
}
}
?>
Результат выполнения кода:
[
{"id": 1, "title": "article 1"},
{"id": 2, "title": "article 2"},
{"id": 3, "title": "article 3"}
]
Пример
Давайте получим агрегированные данные с помощью COUNT:
<?php
namespace App\Controller;
use App\Entity\Article;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/articles/count', name: 'article_count')]
public function count(EntityManagerInterface $em): Response
{
$query = $em->createQuery(
'SELECT COUNT(a.id) AS total FROM App\Entity\Article a'
);
$res = $query->getScalarResult();
return new Response(json_encode($res));
}
}
?>
Результат выполнения кода:
[{"total": 5}]
Смотрите также
-
класс
Query,
который представляет DQL-запрос -
метод
getResult,
который возвращает результат в виде объектов -
метод
getArrayResult,
который возвращает результат в виде массива -
метод
getSingleScalarResult,
который возвращает одно скалярное значение