2017-09-11 128 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,一切似乎確定。