Метод firstOrFail
Метод firstOrFail применяется к запросу Eloquent
или Query Builder и возвращает первую запись, соответствующую
условиям выборки. Если запись не найдена, метод выбрасывает
исключение Illuminate\Database\Eloquent\ModelNotFoundException.
Это удобно в ситуациях, когда отсутствие записи должно
обрабатываться как ошибка, например, при отображении страницы
конкретной статьи или пользователя.
Синтаксис
<?php
Model::where($column, $value)->firstOrFail();
?>
Метод firstOrFail не принимает параметров. Он вызывается
после применения условий выборки к запросу и возвращает экземпляр
модели при успешном нахождении записи.
Пример
Давайте получим статью с id равным 1. Если такая статья
существует, мы выведем её заголовок:
<?php
use App\Models\Article;
try {
$article = Article::where('id', 1)->firstOrFail();
echo $article->title;
} catch (\Illuminate\Database\Eloquent\ModelNotFoundException $e) {
echo "Article not found";
}
?>
Результат выполнения кода при наличии статьи:
"Laravel Basics"
Пример
А теперь попробуем получить статью с несуществующим id равным 999:
<?php
use App\Models\Article;
try {
$article = Article::where('id', 999)->firstOrFail();
echo $article->title;
} catch (\Illuminate\Database\Eloquent\ModelNotFoundException $e) {
echo "Article with id 999 not found";
}
?>
Результат выполнения кода:
"Article with id 999 not found"
Пример
Давайте получим первую активную статью с определённым статусом. Если такой статьи нет, будет выброшено исключение:
<?php
use App\Models\Article;
try {
$article = Article::where('status', 'published')
->where('is_active', true)
->firstOrFail();
echo "Found active article: " . $article->title;
} catch (\Illuminate\Database\Eloquent\ModelNotFoundException $e) {
echo "No active published articles found";
}
?>
Результат выполнения кода при наличии активной опубликованной статьи:
"Found active article: Getting Started with Laravel"
Пример
Метод firstOrFail также можно использовать с условиями
сортировки, чтобы получить первую запись в определённом порядке:
<?php
use App\Models\Article;
try {
$article = Article::where('category', 'tutorial')
->orderBy('created_at', 'desc')
->firstOrFail();
echo "Latest tutorial: " . $article->title;
} catch (\Illuminate\Database\Eloquent\ModelNotFoundException $e) {
echo "No tutorials found";
}
?>
Результат выполнения кода при наличии туториалов:
"Latest tutorial: Advanced Eloquent Techniques"
Смотрите также
-
метод
first,
который возвращает первую запись или null, если запись не найдена -
метод
findOrFail,
который выбрасывает исключение, если запись с указанным id не найдена -
метод
find,
который ищет запись по id и возвращает null при отсутствии результата -
метод
sole,
который возвращает единственную запись или выбрасывает исключение при множестве результатов