Исключение ModelNotFoundException
Исключение ModelNotFoundException выбрасывается
Laravel, когда Eloquent не может найти модель по заданному
идентификатору или условию. Чаще всего возникает при
использовании методов findOrFail,
firstOrFail, firstWhere с флагом
получения или при попытке получить связанную модель,
которая не существует. Исключение наследуется от
Illuminate\Database\Eloquent\ModelNotFoundException.
Синтаксис
<?php
use Illuminate\Database\Eloquent\ModelNotFoundException;
// Обычный вызов, который может выбросить исключение
Model::findOrFail($id);
?>
Пример
Давайте попробуем найти статью с несуществующим идентификатором:
<?php
use AppModelsArticle;
try {
$article = Article::findOrFail(999);
echo $article->title;
} catch (ModelNotFoundException $e) {
echo "Article not found";
}
?>
Результат выполнения кода:
"Article not found"
Пример
Давайте попробуем найти первую запись по несуществующему условию:
<?php
use AppModelsUser;
use Illuminate\Database\Eloquent\ModelNotFoundException;
try {
$user = User::where('email', 'notfound@example.com')->firstOrFail();
echo $user->name;
} catch (ModelNotFoundException $e) {
echo "User with this email not found";
}
?>
Результат выполнения кода:
"User with this email not found"
Пример
Давайте обработаем исключение при получении связанной модели:
<?php
use AppModelsArticle;
use Illuminate\Database\Eloquent\ModelNotFoundException;
try {
$article = Article::with('category')->findOrFail(1);
if ($article->category) {
echo $article->category->name;
} else {
echo "Category not found";
}
} catch (ModelNotFoundException $e) {
echo "Article not found";
}
?>
Результат выполнения кода при наличии статьи, но без категории:
"Category not found"
Пример
Давайте обработаем исключение в контроллере и вернём 404 страницу:
<?php
namespace AppHttpControllers;
use AppModelsArticle;
use Illuminate\Database\Eloquent\ModelNotFoundException;
class ArticleController extends Controller
{
public function show($id)
{
try {
$article = Article::findOrFail($id);
return view('article.show', ['article' => $article]);
} catch (ModelNotFoundException $e) {
abort(404, 'Article not found');
}
}
}
?>
Результат выполнения кода при запросе несуществующей статьи:
"HTTP 404 - Article not found"
Смотрите также
-
исключение
RecordsNotFoundException,
которое выбрасывается, когда не найдено ни одной записи -
исключение
MultipleRecordsFoundException,
которое выбрасывается, когда найдено несколько записей -
исключение
NotFoundHttpException,
которое выбрасывается при HTTP ошибке 404 -
исключение
render,
метод для обработки и рендеринга исключений