【问题标题】:Pagination eloquent分页雄辩
【发布时间】:2018-02-19 17:32:43
【问题描述】:

我想通过 linkscount em ASC 对排序进行分页...

表格页面:

----------------------
id | name
----------------------
1  | Globo
---------------------- 
2 | Google
---------------------- 
3 | MC Donalds
---------------------- 
4 | Habibs

查询FIRST PAGE RESULTS(订单/查询OK):

            $pages = Mypages::where('pages.author_id', auth()->user()->id)
                ->orderBy('linkscount', 'desc')
                ->leftJoin('links', 'links.page_id', '=', 'pages.id')
                ->selectRaw('pages.*, count(links.id) as linkscount')
                ->groupBy('pages.id')
                ->take(2)
                ->get();

查询到分页(顺序/查询不正确):

                $pages = Mypages::where('pages.author_id', auth()->user()->id)
                ->orderBy('linkscount', 'asc')
                ->leftJoin('links', 'links.page_id', '=', 'pages.id')
                ->selectRaw('pages.*, count(links.id) as linkscount')
                ->groupBy('pages.id')
                ->where('pages.id', '>', $id)
                ->take(2)
                ->get();

这个查询,不返回任何内容,它是返回“MC Donalds”...

$id = 显示的最后一个 ID。

【问题讨论】:

  • 这与真正的 SQL 查询相差甚远,但是如果您选择所有记录(页面。*)并且仅按 pages.id 分组,您通常会收到一个 SQL 错误,表明您的列是无效,因为它们不是聚合的,也不是 GROUP BY 的一部分。再说一次,这不是真正的 SQL,我不知道这些语言会如何处理它。
  • 为什么不直接使用pagination 函数,它会为您完成所有这些工作?
  • 因为我使用了 eloquent 无法识别的查询

标签: php sql laravel pdo eloquent


【解决方案1】:

就像 Jacob H 在评论中所说,这不是一个真正的 SQL,因为 group by 函数需要包含您在 select 中拥有的所有查询列,除了计数、总和等函数。

对于本示例,您需要将 pages.name 和 pages.id 放入 group by

$pages = Mypages::where('pages.author_id', auth()->user()->id)
            ->orderBy('linkscount', 'asc')
            ->leftJoin('links', 'links.page_id', '=', 'pages.id')
            ->selectRaw('pages.id, pages.name, count(links.id) as linkscount')
            ->groupBy('pages.id', 'pages.name')
            ->where('pages.id', '>', $id)
            ->take(2)
            ->get();

如果您发送正确的$id,一切似乎都正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 2018-11-04
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多