我对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');
答案 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();