【问题标题】:Get paginated results that are also ordered using Laravels QueryBuilder获取也使用 Laravel QueryBuilder 排序的分页结果
【发布时间】:2020-04-21 06:57:42
【问题描述】:

我想检索按 created_at 日期排序的帖子,但我也想对结果进行分页。到目前为止,我已经尝试了以下方法:

$posts = Post::orderBy('created_at', 'desc')->get();

$posts = Post::paginate(10);

以上仅返回 10 个结果,并且不按 created_at 日期排序。

我想检索按 created_at 日期排序的 10 个帖子。任何帮助表示赞赏。

【问题讨论】:

  • ->get()->paginate() 都是执行查询的函数,因此 Post::paginate() 正在运行一个新查询并对所有帖子进行分页。要使用带有任何约束的分页,请像在第一个示例中那样编写查询并将->get() 替换为->paginate($perPage)
  • @ru501 只需将get() 替换为paginate(10)paginate() 获取所有数据并在调用分页时根据给定/定义放置限制和偏移量。
  • 这能回答你的问题吗? Laravel - Paginate and get()
  • 是的,不要覆盖你的变量。如果您有两个 $posts = Post::{method}(); 实例,则第二个将覆盖第一个,除非第二个引用第一个,例如 $posts = $posts->{method}();

标签: php laravel


【解决方案1】:

我不确定“如果同时编写两个代码,它会被覆盖”是什么意思,但以下应该可以工作:

$posts = Post::orderBy('created_at', 'desc')->paginate(10);

【讨论】:

    【解决方案2】:

    你可以这样试试

    $posts = Post::orderBy('created_at', 'desc')->paginate(10);
    

    【讨论】:

      【解决方案3】:

      返回的帖子被覆盖的原因是您重新分配了$posts 变量。请查看以下内容以纠正问题。

      Laravel QueryBuilder 允许您将多个过滤器一个接一个地串起来。

      在这种情况下,您将按 created_at 日期对帖子进行排序,然后通过分页过滤器检索结果。分页过滤器将替换 ->get()

      $posts = Post::orderBy('created_at', 'desc')->paginate(10);
      

      【讨论】:

        【解决方案4】:

        您可以简单地使用paginate() 而不是get()。两者都从数据库中获取数据,而只有一个区别是,分页根据给定的参数设置限制,并根据需要设置限制和偏移量。

        Paginating Eloquent Results

        $posts = Post::orderBy('created_at', 'desc')->paginate(10);
        

        打印分页链接如:

        {{ $$posts->links() }}
        

        【讨论】:

          【解决方案5】:

          你可以像这样使用 paginate 或 simplePaginate

          $posts = Post::orderBy('created_at', 'desc')->paginate(10);
          
          

          详情https://laravel.com/docs/5.8/pagination

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-06-18
            • 2012-03-06
            • 2016-11-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-09-16
            相关资源
            最近更新 更多