【问题标题】:Query Builder - how to chain paginate and keyBy?查询生成器 - 如何链接分页和 keyBy?
【发布时间】:2016-11-22 12:19:47
【问题描述】:

此代码为我提供了一个分页结果集,以及附加信息 - 总记录数、每页记录数、下一页 URL 等。我想要所有这些。但我也想通过 ID 来键入主要结果集,而不仅仅是获取数字数组。

$laptops = Laptop::addJoins()->filterResults($request)->selectListCols()->paginate(50);

这可能吗?我尝试在最后链接keyBy('id'),结果是一个键控对象,但没有任何分页信息。

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

    执行此操作以获取由id 键入的集合:

    $laptopsCollection = $laptops->getCollection()->keyBy('id');
    

    如果您想更新分页器本身使用的集合(因此仍然可以访问所有分页信息),请稍后执行:

    $laptops->setCollection($laptopsCollection);
    

    【讨论】:

    • 太棒了-谢谢!不过,我真的不知道我应该怎么知道。我在文档中的任何地方都看不到 getCollection() 方法。
    • 我通常dd($laptops) 看到类名Paginator,然后打开相应的文件vendor/laravel/framework/src/Illuminate/Pagination/Paginator.php 并探索它隐藏了什么好东西,经常挖掘它扩展的类,在这种情况下@987654327 @.
    • 很抱歉把这个重新提出来,但是上面的两个语句似乎弄乱了结果的顺序。因此,如果我的查询构建器中有一个 sortBy() 子句,那么上面的 getCollection 和 setCollection 方法会破坏排序顺序。你知道如何解决这个问题吗?
    • getCollectionsetCollection 不要以任何方式修改集合。你确定即使设置了$laptopsCollection也不会乱来? sortBy 也是一种收集方法,对于查询构建器,它应该是 orderBy(在 paginate 之前使用)。除此之外,如果没有看到代码就很难提供帮助,如果您仍然遇到问题,请尝试提出单独的问题。
    猜你喜欢
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    • 2014-03-13
    • 2022-10-18
    • 2019-09-12
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多