如何在Laravel 5中对帖子中的评论进行分页

时间:2016-08-11 14:37:48

标签: laravel-5 pagination

情景 - 我假设我有数千个帖子,每个帖子有1-1000条评论。 好吧,我可以简单地用10或20对帖子进行评论 这将返回带有注释的分页帖子。

SELECT *
from MyTable
where CASE @CHECKPOINTTYPE
    WHEN 'Column1' THEN Column1
    WHEN 'Column2' THEN Column2
    ELSE NULL
  END = 1

问题在于我想对评论进行分页,因此每篇帖子都会返回4条评论。那么,如果帖子有超过4条评论,我如何调用其他评论?

1 个答案:

答案 0 :(得分:2)

我认为最好的方法是将帖子存储在单独的表格中。例如,使用以下迁移

创建一个post表
Schema::create('posts', function(Blueprint $table){
    $table->increments('id');
    $table->string('title');
    $table->timestamps();
});

现在使用迁移创建评论表:

   Schema::create('comments', function(Blueprint $table){
        $table->increments('id');
        $table->integer('post_id')->unsigned();           
        $table->string('name');
        $table->text('comment_body');
        $table->timestamps();

        $table->foreign('poem_id')->references('id')->on('posts'); 
    });

在这两个表之间创建一对多关系,如下所示:

对于Post模型,

class Post extends Model
{
    ...     

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

Comment模型,

class Comment extends Model
{
    protected $fillable =  ['post_id', 'c_body', 'name'];

    public function posts(){
        return $this->belongsTo('App\Poem', 'post_id');
    }   


}

此时,在填充两个数据库表:postscomments之后,您可以在控制器中单独查询它们。 为此,请在控制器顶部添加两行: use App\Post; use App\Comment;

现在,您可以在该控制器中选择任何方法,查询每个方法的帖子和评论,如下所示

public function index(){
    $posts = Post::where('published',true);
    $comments = Post::where('published',true)->comments;
   // pass this data to your view
   return view('anyview', compact('posts', 'comments');
}

我的答案很长,尽管我试图缩短它。希望它有所帮助。