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

RecordsNotFoundException

Исключение RecordsNotFoundException относится к категории исключений базы данных в Laravel. Оно выбрасывается методами Eloquent, которые ожидают найти одну или несколько записей, но в результате запроса не было получено ни одной. Это исключение является частью механизма гарантированного получения данных и помогает разработчику обрабатывать ситуации, когда данные отсутствуют.

Исключение наследуется от Illuminate\Database\Eloquent\ModelNotFoundException, но используется в контексте методов, возвращающих коллекции или множественные результаты. Основное отличие в том, что RecordsNotFoundException сигнализирует об отсутствии записей в ситуациях, где ожидается наличие как минимум одной записи.

В отличие от ModelNotFoundException, которое обычно выбрасывается при использовании findOrFail для одной модели, RecordsNotFoundException возникает при работе с методами, предназначенными для получения нескольких записей, например, firstOrFail или getOrFail.

Синтаксис

<?php use Illuminate\Database\Eloquent\Model; // При использовании методов, выбрасывающих исключение $records = Model::where('column', 'value')->getOrFail(); // Или с использованием firstOrFail $record = Model::where('column', 'value')->firstOrFail(); ?>

Пример

Давайте попробуем получить все записи с определённым статусом. Если таких записей нет, метод getOrFail выбросит исключение RecordsNotFoundException:

<?php namespace App\Http\Controllers; use App\Models\Article; use Illuminate\Database\Eloquent\RecordsNotFoundException; class ArticleController extends Controller { public function index() { try { $articles = Article::where('status', 'archived')->getOrFail(); foreach ($articles as $article) { echo $article->title; } } catch (RecordsNotFoundException $e) { echo "No articles found with status 'archived'"; } } } ?>

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

"No articles found with status 'archived'"

Пример

Давайте используем метод firstOrFail для получения первой записи по условию. Если запись не найдена, будет выброшено исключение RecordsNotFoundException:

<?php namespace App\Http\Controllers; use App\Models\User; use Illuminate\Database\Eloquent\RecordsNotFoundException; class UserController extends Controller { public function show($role) { try { $user = User::where('role', $role)->firstOrFail(); echo $user->name; } catch (RecordsNotFoundException $e) { echo "User with role '{$role}' not found"; } } } ?>

Если мы передадим роль, которой нет в базе данных, результат будет следующим:

"User with role 'admin' not found"

Пример

Исключение также может быть вызвано при использовании метода findOrFail с массивом идентификаторов, если ни один из них не найден:

<?php namespace App\Http\Controllers; use App\Models\Category; use Illuminate\Database\Eloquent\RecordsNotFoundException; class CategoryController extends Controller { public function getCategories() { $ids = [10, 20, 30]; try { $categories = Category::findOrFail($ids); foreach ($categories as $category) { echo $category->name; } } catch (RecordsNotFoundException $e) { echo "No categories found with ids: " . implode(', ', $ids); } } } ?>

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

"No categories found with ids: 10, 20, 30"

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

  • исключение ModelNotFoundException,
    которое выбрасывается при отсутствии конкретной модели
  • исключение MultipleRecordsFoundException,
    которое выбрасывается при обнаружении нескольких записей
  • исключение QueryException,
    которое выбрасывается при ошибках выполнения SQL-запроса
  • исключение UniqueConstraintViolationException,
    которое выбрасывается при нарушении уникальности поля
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить