【问题标题】:Paginate Eager Load Constraints分页急切负载约束
【发布时间】:2013-05-29 08:52:30
【问题描述】:

我正在使用 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 显示它具有正确的链接 cmets,并且限制为 10 个结果。分页也会响应GET 页面参数并将分页,但是尝试回显$topic->comments->links() 会导致找不到方法错误。

我的解决方法是进行第二个查询,计算附加的 cmets,然后在我的视图中使用以下内容:

$paginator = Paginator::make($topic->comments->toarray(), $commentCount, 10);
echo $paginator->appends(array('tab' => 'comments'))->links();

这是一个错误吗?

【问题讨论】:

    标签: php laravel laravel-4


    【解决方案1】:

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

    既然您只是通过它的 cmets 获得一个主题,为什么不这样做(相同数量的数据库调用)...

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

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

    【讨论】:

    • 我怀疑这是分页发生的事情。谢谢你的建议,正如你所说,它会同样有效 - 只是不那么漂亮:)
    猜你喜欢
    • 1970-01-01
    • 2020-02-26
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 2015-01-31
    相关资源
    最近更新 更多