Laravel 5.4集合sortByDesc无法正常工作

时间:2018-02-13 10:54:25

标签: php laravel-5 collections

我对Eloquent有两个查询,我收集并合并后,我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');

3 个答案:

答案 0 :(得分:0)

无需包含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();

答案 1 :(得分:0)

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表示升序。

答案 2 :(得分:0)

documentation所述,您可以在排序结束时使用values()

$gameCollection = collect($game);

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

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

在这种情况下应该是

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