2017-10-17 24 views
0

我有一个Status模型,其中每个实例可以有多个子状态/注释。我能够通过这种关系功能的方式来收集这些意见:如何正确高效地使用Eloquent加载新记录

public function comments() { 
    return $this->hasMany('App\Models\Status', 'parent_id'); 
} 

现在对网页的初始加载,每个状态显示最多为4条(最后4个最近的评论)。我现在想要做的是:

在选择“查看更多评论”按钮后,向端点发出一个AJAX请求,以抓取前20个最新评论并将它们呈现给页面。我已经能够设置我的AJAX就好,甚至渲染,但我抓住了所有的评论,甚至已经提供的初步评论,而不是只有下一组的20块。

我应该使用Eloquents Chunk MethodTake MethodSplice Method?或另一组方法的组合?

回答

0

使用分页。

$status = Status::find(1); 
$comments = $status->comments() 
    ->latest() // Equivalent to: orderBy('created_at', 'desc') 
    ->skip(4) 
    ->paginate(20); 

,使您的AJAX请求时,传递一个page值与请求无论是作为POSTGET参数。

+0

我已阅读文档,但仍有点含糊不清。所以A)因为我已经有4个最初的评论加载了,我如何在第一个4之后开始分页? B)“页面”值是否到位以确保它不会重新分页相同的记录? –

+0

您应该能够在前4个结果后跳过(4)'开始分页(我没有应用任何排序,您可能需要)。我可能会误解你的(b)问题 - 你需要维护分页值。如果您将JSON返回到前端,则可以将其保留在父注释,数据属性或类似内容上。 – fubar

+0

我收到了以下错误:'尽管'使用Illuminate \ Pagination \ Paginator',但在485线上的Vendor/illuminate/database/Eloquent/Builder.php中找不到'PHP Illuminate \ Pagination \ Paginator'声明在我的模型顶部 –

0

无论对你来说似乎都是最好的,无论如何解决你的问题。但一定不要从laravel领域脱身。但在我看来,这里的Pagination的概念可以派上用场。它超级简单,并带有很多方法。

相关问题