Метод getOneOrNullResult
Метод getOneOrNullResult класса Query
выполняет запрос и возвращает первую найденную
запись. Если запись не найдена, метод возвращает
null. Метод не принимает параметров и
бросает исключение, если запрос вернул больше
одной записи.
Синтаксис
$res = $query->getOneOrNullResult();
Пример
Давайте получим одну статью по её id:
<?php
namespace AppRepository;
use AppEntityArticle;
use DoctrineBundleDoctrineBundleRepositoryServiceEntityRepository;
use DoctrinePersistenceManagerRegistry;
class ArticleRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Article::class);
}
public function findOneById(int $id): ?Article
{
$query = $this->createQueryBuilder('a')
->where('a.id = :id')
->setParameter('id', $id)
->getQuery();
return $query->getOneOrNullResult();
}
}
?>
Пример
Давайте используем метод в контроллере и вернём результат:
<?php
namespace AppController;
use AppRepositoryArticleRepository;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article/{id}', name: 'article_show')]
public function show(int $id, ArticleRepository $repository): Response
{
$res = $repository->findOneById($id);
if ($res === null) {
return new Response('article not found');
}
return new Response($res->getTitle());
}
}
?>
Результат выполнения кода для адреса /article/1:
abcde
Пример
Давайте обработаем случай, когда запись не найдена:
<?php
namespace AppController;
use AppRepositoryArticleRepository;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article/{id}', name: 'article_show')]
public function show(int $id, ArticleRepository $repository): Response
{
$res = $repository->findOneById($id);
if ($res === null) {
return new Response('article not found');
}
return new Response($res->getTitle());
}
}
?>
Результат выполнения кода для адреса /article/999:
"article not found"
Смотрите также
-
класс
Query,
который представляет собой запрос Doctrine -
метод
getResult,
который возвращает массив записей -
метод
getSingleResult,
который возвращает ровно одну запись -
метод
getSingleScalarResult,
который возвращает одно скалярное значение