0

我正在使用 Laravel 4:

我正在尝试对急切加载的约束进行分页,本质上我有一个主题模型,它与评论模型具有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();

这是一个错误吗?

4

1 回答 1

0

当您调用paginate()您的急切约束时,它正在为您配置查询(设置跳过和采取)。生成的分页器实际上将被丢弃。

既然你只是得到一个带有评论的主题,为什么不这样做(相同数量的数据库调用)......

$topic = Topic::find($id);
$comments = $topic->comments()->order_by('created_at DESC')->paginate(10);

诚然,您将无法使用$topic->comments来获取分页器,而必须使用$comments它,但这并不是一件可怕的事情。

于 2013-06-03T09:46:25.463 回答