簡體   English   中英

Laravel 5.4 集合 sortByDesc 不起作用

[英]Laravel 5.4 collection sortByDesc not working

我有兩個關於sortByDesc查詢,我收集並合並它們,然后我做了sortByDesc但它不是排序集合。

$f_games = collect(Game::with('fUser', 'sUser')->where('first_user_id', Auth::user()->id)>get());
$s_games = collect(Game::with('fUser', 'sUser')->where('second_user_id', Auth::user()->id)->get());

$response = $f_games->merge($s_games)->sortByDesc('id');

不需要在collect()包裝, $f_games$s_games將是沒有額外包裝的集合:

$f_games = Game::with('fUser', 'sUser')->where('first_user_id', Auth::user()->id)>get();
$s_games = Game::with('fUser', 'sUser')->where('second_user_id', Auth::user()->id)->get();
$response = $f_games->merge($s_games)->sortByDesc('id');

但最好的辦法是:

$user_id = Auth::user()->id;

$f_s_games = Game::with('fUser', 'sUser')
             ->where('first_user_id', $user_id)
             ->orWhere('second_user_id',$user_id)
             ->orderBy('id', 'desc')
             ->get();

sortByDesc方法按屬於模型中某個雄辯關系的字段對集合進行排序。

如果您嘗試使用sortByDesc為模型本身(您當前的模型對象)對集合進行排序,請使用orderBy而不是sortByDesc

示例

對於模型本身

{$collection_list = $this->model_name->orderBy('field_name','DESC')->get();}

對於將在視圖中延遲加載的關系

{$collection_list = $this->model_name->get()->sortBy('table_name.field_name', SORT_REGULAR, true);}

注意sortByDesc內部調用sortBy()降序,true 表示降序,false 表示升序。

您可以在排序結束時使用values() ,如文檔中所述

$gameCollection = collect($game);

$sorted = $gameCollection->sortByDesc('date');

return $sorted->values()->all();

在你的情況下應該是

$response = $f_games->merge($s_games)->sortByDesc('id')->values();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM