检查是否没有该ID的记录

时间:2015-01-12 21:11:14

标签: php sql laravel

我刚刚开始学习laravel,我希望将这个框架与它的优点结合起来。我问这个问题是用laravel来学习正确的方法。

它正在打印帖子表中的帖子,该表格具有相同的id和$ id。

<?php
    class PostsController extends BaseController{

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

    }

通常我会检查是否有一个id等于$ id的帖子,如果是,则返回视图等等。是不是有更好的方法来使用laravel,就像你可以使用路由过滤器。

不久,

  • 如何知道是否有该ID的帖子?
  • 如果没有,如何抛出异常?
  • ...

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分: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(),这会导致使用该ID找不到帖子的例外。