Laravel 4中的雄辩查询如何使用特定类别的评论显示单个帖子

时间:2013-06-24 22:54:55

标签: laravel laravel-4 eloquent

很多小时我不能做到以下几点: 我有桌子:
类别: id,名称
帖子: id,category_id,标题,文字,隐藏('1'或'0'),crated_at,update_at等.... 评论:id,post_id,user_id,text,created_at
用户: ID,姓名等...

我的模特:

class Category extends Eloquent {

    public function posts() {
        return $this->hasMany('Post');
    }
}

class Comment extends Eloquent {

    public function post()
    {
        return $this->belongsTo('Post');
    }

    public function user() {
        return $this->belongsTo('user');
    }

}

class Post extends Eloquent {

    public function category() {

        return $this->belongsTo('category');
    }

    public function comments() {
        return $this->hasMany('Comment');
    }
}

class User extends Eloquent {
    public function comments() {
        return $this->hasMany('comment');
    }

}

好的,我有两个类别,可以显示特定类别的所有帖子,如

$posts = Category::find(1)->posts()->orderBy('created_at', 'desc')->where('hidden', '=', 0)->paginate(5);

现在我想创建一个单一帖子的查询,但我不知道如何。
我想要:
1.当我输入/ news / 1它显示我1个类别的第1个帖子,但如果我输入/ news / 2它没有显示帖子,因为其他类别中的第2个帖子
无论如何,邮政有很多评论,基本上我知道怎么做 3.如果隐藏帖子,则不应通过网址显示

2 个答案:

答案 0 :(得分:2)

    public function show($id) {
    // This code works, but I could not make a pagination for comments
    //$posts = Category::find(1)->posts()->orderBy('created_at', 'desc')->where('hidden', '=', 0)->where('id', '=', $id)->with('comments', 'comments.user')->get();
    //Following code works as i want
    $posts = Category::find(1)->posts()->orderBy('created_at', 'desc')->where('hidden', '=', 0)->where('id', '=', $id)->get();
    $comments = Comment::where('post_id', '=', $id)->paginate(10);
    //This line adds +1 to views, but on every click. Need to work on that
    //if (count($posts) > 0) Post::where('id', '=', $id)->increment('views');
    return View::Make('news.view')->with(array('posts' => $posts, 'comments' => $comments));
}

答案 1 :(得分:0)

只需创建一个函数并将帖子号码传递为$id或其他任何内容。

我只是在这里命名函数news并传递$ id,但是你的将是不同的因为我不知道你的控制器/页面结构....但它沿着这些线。

 public function news($id){

$posts = Category::find(1)->posts()->orderBy('created_at', 'desc')->where('hidden', '=', 0)->where('id','=',$id)->get();
 print_r($posts);
}

现在它会在该类别1中找到该特定帖子......如果该类别中不存在该帖子,则不应返回任何内容。

因此,如果您转到news/1它会显示,如果您转到news/2,则不会显示任何内容,因为该类别仍然停留在(1)