2017-09-11 105 views
1

我想通过分页EM linkscount ASC排序...分页雄辩

表页面:

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

查询第一页结果(订单/查询是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(); 

查询进行分页(顺序/查询不是OK):

   $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显示。

+0

这与真正的SQL查询相差甚远,但是如果您选择所有记录(pages。*)并仅通过pages.id进行分组,则通常会出现SQL错误,因为它们不是无效的列聚合或部分GROUP BY。然后再次,这不是真正的SQL,我不知道这些语言如何处理它。 –

+1

为什么不使用[pagination](https://laravel.com/docs/5.5/pagination)函数,它将为您完成所有这些工作? – aynber

+0

因为我使用雄辩无法识别的查询 –

回答

0

就像Jacob H在评论中所说的那样,这不是一个真正的SQL,因为按功能分组需要具有查询的所有列,除了计数,总和等功能外。

在这个例子中,你需要通过

$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(); 

把pages.name和pages.id组中如果您发送的正确$id,一切似乎确定。