2017-04-17 147 views
0

這是一些排序:(laravel)兩個ORDER BY子句和LIMIT

  1. 我想根據 「意見」,列出20個最好的帖子。
  2. 然後,根據「created_at」進行排序。

怎麼辦?

繼承人我當前的代碼(這工作,而是通過 「created_at」 犯規排序):

$this->data['today_post'] = 
Posts::orderBy('views', 'desc') 
->orderBy('created_at', 'desc') 
->whereRaw('created_at >= NOW() - INTERVAL 1 DAY') 
->limit(20)->get(); 
+0

https://laracasts.com/discuss/channels/eloquent/multiple-orderby-on-query – jamesgarrett

回答

0

你可以這樣寫。希望這將解決您的問題

$this->data['today_post'] = 
Posts::orderBy('views', 'desc') 
->orderBy('created_at', 'desc') 
->whereDate('created_at', Carbon::today()->toDateString()) 
->limit(20) 
->get(); 

此外,在控制器的開頭添加use Carbon\Carbon;

+0

不工作。你從我的標題中看到我的問題不是「日期」。我的問題是排序。我想分兩次。首先按視圖排序限制20.然後按時間排序(desc)。 – dobieme

+0

@dobieme我提供的代碼在我的系統中工作正常。請看看你的表格結構。 –

+0

是的,它工作,但不排序「created_at」:( – dobieme

0

從數據庫中首先獲取集合

$x = Posts::whereRaw('created_at >= NOW() - INTERVAL 1 DAY')->orderBy('views', 'desc')->limit(20)->get(); 

然後進行排序集合

降序:

$this->data['today_post'] = $x->sortByDesc('created_at'); 

升序:

$this->data['today_post'] = $x->sortBy('created_at'); 
0

你可以簡單的排序結果山坳經文。保持你的代碼,添加以下內容:

$this->data['today_post'] = $this->data['today_post']->sortBy('created_at'); 
+0

這個工程!謝謝:) – dobieme

+0

不錯!你會將它標記爲解決方案嗎?會很好,因爲這是我的第一個正確答案:) – aaron0207