Метод getSingleScalarResult класса Query
Метод getSingleScalarResult класса Query в Doctrine выполняет
запрос и возвращает первое значение из первой строки результата.
Метод удобен, когда запрос заведомо должен вернуть одно число или
одну строку, например результат функции COUNT или MAX.
Если запрос вернёт больше одной строки или больше одного столбца,
метод выбросит исключение.
Синтаксис
public function getSingleScalarResult(): mixed
Пример
Давайте посчитаем количество статей в базе через 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('/article/count', name: 'article_count')]
public function count(EntityManagerInterface $em): Response
{
$qb = $em->createQueryBuilder();
$qb->select('COUNT(a.id)')
->from(Article::class, 'a');
$res = $qb->getQuery()->getSingleScalarResult();
return new Response((string) $res);
}
}
?>
Результат выполнения кода:
5
Пример
Давайте получим максимальный идентификатор статьи:
<?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('/article/max-id', name: 'article_max_id')]
public function maxId(EntityManagerInterface $em): Response
{
$qb = $em->createQueryBuilder();
$qb->select('MAX(a.id)')
->from(Article::class, 'a');
$res = $qb->getQuery()->getSingleScalarResult();
return new Response((string) $res);
}
}
?>
Результат выполнения кода:
42
Пример
Давайте получим название первой статьи, отсортированной по идентификатору:
<?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('/article/first-title', name: 'article_first_title')]
public function firstTitle(EntityManagerInterface $em): Response
{
$qb = $em->createQueryBuilder();
$qb->select('a.title')
->from(Article::class, 'a')
->orderBy('a.id', 'ASC')
->setMaxResults(1);
$res = $qb->getQuery()->getSingleScalarResult();
return new Response($res);
}
}
?>
Результат выполнения кода:
"article"
Смотрите также
-
класс
Query,
который представляет собой запрос Doctrine -
метод
getScalarResult,
который возвращает массив скалярных значений -
метод
getSingleResult,
который возвращает единственный объект -
метод
getOneOrNullResult,
который возвращает один объект или null