Исключение NoResultException
Исключение NoResultException относится к классу
DoctrineORMNoResultException и выбрасывается
Doctrine ORM при вызове методов getSingleResult
или getOneOrNullResult, если запрос не вернул
ни одной записи. Оно наследуется от
RuntimeException и реализует интерфейс
Throwable. Параметров у исключения нет: при
выбросе передаётся только текстовое сообщение об
ошибке.
Синтаксис
use DoctrineORMNoResultException;
throw new NoResultException('No result was found.');
Пример
Давайте вызовем метод getSingleResult для
запроса, который не находит ни одной записи:
<?php
namespace AppRepository;
use AppEntityArticle;
use DoctrineBundleDoctrineBundleRepositoryServiceEntityRepository;
use DoctrinePersistenceManagerRegistry;
use DoctrineORMNoResultException;
class ArticleRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Article::class);
}
public function findOneByTitle(string $title): ?Article
{
try {
return $this->createQueryBuilder('a')
->where('a.title = :title')
->setParameter('title', $title)
->getQuery()
->getSingleResult();
} catch (NoResultException $e) {
return null;
}
}
}
?>
Результат выполнения кода при отсутствии записи:
null
Пример
Давайте рассмотрим выброс исключения без перехвата в контроллере:
<?php
namespace AppController;
use AppEntityArticle;
use DoctrineORMEntityManagerInterface;
use DoctrineORMNoResultException;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_show')]
public function show(EntityManagerInterface $em): Response
{
try {
$article = $em->createQuery(
'SELECT a FROM AppEntityArticle a WHERE a.title = :title'
)
->setParameter('title', 'abcde')
->getSingleResult();
return new Response($article->getTitle());
} catch (NoResultException $e) {
return new Response('no result', 404);
}
}
}
?>
Результат выполнения кода при отсутствии записи:
"no result"
Смотрите также
-
исключение
NonUniqueResultException,
которое выбрасывается при нескольких результатах -
исключение
EntityNotFoundException,
которое выбрасывается при отсутствии сущности -
исключение
NotFoundHttpException,
которое возвращает ответ 404 -
исключение
FlattenException,
которое преобразует исключение в массив