2017-04-20 123 views
0

這是一些排序:(LARAVEL)兩個ORDER BY和LIMIT

  1. 獲得20個職位通過 「意見」 進行排序。
  2. AFTER IT FINISH,然後進入下一步。
  3. 按「created_at」對其進行排序。

怎麼辦?

繼承人我的當前代碼(哪些工作,但我不想使用SORTBY)出於某種原因sortby不適用於其他項目。如果可能的話我希望它是作爲一個雄辯查詢:

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

此代碼是不工作的,因爲限制是作爲最後的操作通常適用,因此結果將首先通過「意見」和「created_at」進行排序然後限制爲20個。我不想要那個。我想排序,然後限制完成。我想再次分類。

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

謝謝你這麼多

+0

用普通的SQL你可以做一個子查詢之類的東西,但不知道eloqent如何做類似的東西。 'SELECT * FROM(SELECT * FROM abc WHERE a = b ORDER BY date ASC)ORDER BY xyz ASC' – JustOnUnderMillions

+0

我不明白它有什麼不同。如果你按照'views'和'created_at'排序,並且取20,你或多或少會採用相同的。唯一的區別是,如果第20個點是一條平局線,並且在這種情況下,如果您未按照創建的順序進行排序,則會得到未定義的順序。 – apokryfos

回答

1

您仍然需要使用sortBy()sortByDesc()如果你想用雄辯。我剛剛測試了這個解決方案,它完美的作品:

Posts::orderBy('views', 'desc') 
    ->where('created_at', '>=', Carbon::now()->subDay()) 
    ->take(20) 
    ->get() 
    ->sortByDesc('created_at');