Проверка отсутствия записи с этим идентификатором

55
5

Я только начал узнавать о laravel, и я хочу использовать эту инфраструктуру с преимуществами. Я задаю этот вопрос, чтобы узнать правильный путь к этому с помощью laravel.

Он печатает сообщение из таблицы posts, которое имеет тот же идентификатор с $ id.

<?php
class PostsController extends BaseController{

public function singlePost($id)
{
$thePost = Posts::find($id);
return View::make('singlePost')->with('thePost', $thePost);
}

}

Обычно я проверяю, есть ли сообщение, id которого равен $ id, и если это так, верните представление и так далее. Разве нет лучшего способа сделать это с помощью laravel, как вы можете делать с фильтрами маршрутов.

Вскоре,

    Как узнать, есть ли сообщение с этим идентификатором? Как бросить исключение, если его нет? ...

спросил(а) 2015-01-13T00:11:00+03:00 4 года, 10 месяцев назад
2
Решение
47

Маршрутная findOrFail модели может быть вариантом, однако более универсальным решением является findOrFail
findOrFail либо вернет модель, либо выбросит ModelNotFoundException которая будет отображаться как страница 404.

$thePost = Posts::findOrFail($id);
return View::make('singlePost')->with('thePost', $thePost);

Чтобы просто проверить существование, вы можете использовать find а затем сравнить с null:

$thePost = Posts::find($id);
if($thePost != null){
// post exists
}

Или проще, просто правдивое значение:

$thePost = Posts::find($id);
if($thePost){
// post exists
}

ответил(а) 2015-01-13T00:19:00+03:00 4 года, 10 месяцев назад
Еще 1 ответ
34

См. "Связывание модели маршрута" в документации.

Route::model('post', 'Post', function() {
// do something if Post is not found
throw new NotFoundHttpException;
});

Route::get('post/{post}', function(Post $post) {
return View::make('singlePost')->with('thePost', $post);
});

Вы также можете просто заменить find() на findOrFail() в своем коде, который бы findOrFail() исключение из сообщения, не найденного с этим идентификатором.

ответил(а) 2015-01-13T00:15:00+03:00 4 года, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема