2015-01-12 3 views
0

Я только начал узнавать о 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, и если это так, верните представление и так далее. Разве нет лучшего способа сделать это с помощью laravel, как вы можете делать с фильтрами маршрутов.

Вскоре

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

ответ

1

маршрута Модель Связывание может быть вариант, однако более универсальное решение 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 
} 

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

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

Да, я знаю, что это путь, но мне интересно, есть ли другой способ для этого с laravel :) – Philosopher

+0

Зачем вам нужен другой способ? Другими словами, что вам не нравится в этом? – lukasgeiter

+0

Как я уже сказал, моя цель - не запускать это, но я хочу узнать о laravel .. – Philosopher

0

См "Route Model Binding" в документации.

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() в вашем коде, который будет бросать исключение пост не был найден с этим идентификатором.

+0

Спасибо человек! Как я могу изменить исключение сбоя, когда я использую findOrFail? – Philosopher

+0

Не уверен, что вы подразумеваете под «изменением», но вы можете ответить на него любым способом, как вам нравится, с помощью стандартного блока «try' /' catch ». – ceejayoz

Смежные вопросы