我正在使用Laravel 4:
我正在尝试对一个Eager Loaded Constraint进行分页,基本上我有一个与模型具有 hasMany 关系的主题模型。这一切都很好,没有问题。但是,我希望能够在管理员编辑主题视图中显示评论的分页表(其中将有数百个)。为此,我想我会使用以下代码:
$topic = Topics::with( array( 'comments' => function($query)
{
$query->orderby('created_at', 'DESC');
$query->paginate(10);
} ) )
->where('id', $id)
->first();
现在,这将为我$topic
提供正确的对象,并且检查$topic->comments
表明它具有正确的链接注释,并且仅限于10个结果。分页也响应GET
页面参数并将分页,但尝试回显$topic->comments->links()
会导致找不到方法的错误。
我的解决方法是使用第二个查询来计算附加的注释,然后在我的视图中使用以下内容:
$paginator = Paginator::make($topic->comments->toarray(), $commentCount, 10);
echo $paginator->appends(array('tab' => 'comments'))->links();
这是一个错误吗?
答案 0 :(得分:0)
当您在急切约束上调用paginate()
时,它正在为您配置查询(设置跳过和拍摄)。生成的分页器实际上将被丢弃。
由于您只是通过其评论获得单个主题,为什么不这样做(相同数量的数据库调用)......
$topic = Topic::find($id);
$comments = $topic->comments()->order_by('created_at DESC')->paginate(10);
不可否认,您将无法使用$topic->comments
来获取分页符,而是必须使用$comments
,但这并不是一件可怕的事情。