我需要按名为 $messages 的 ID 对对象数组进行升序排序,我尝试了很多方法,但似乎都不起作用。这是我尝试过的:
public function getMessagesPage(Request $request)
{
$user_id = $request->session()->get('id');
$user_second = User::where('username', $request->username)->first();
$messages_1 = Messages::where('user_1', $user_id, 'AND')->where('user_2', $user_second->id)->orderBy('id', 'asc')->get();
$messages_2 = Messages::where('user_2', $user_id, 'AND')->where('user_1', $user_second->id)->orderBy('id', 'asc')->get();
$messages = $messages_1->merge($messages_2);
$messages = collect($messages);
$messages->sortBy('id');
return view('messages')->with('messages', $messages)->with('user_id', $user_id)->with('user_second', $user_second);
}
最佳答案
您可以使用 sortBy()
对您的集合进行排序,但请记住该函数返回已排序的集合,不会改变原始集合 ,所以你必须改变这一行:
//$messages->sortBy('id');
$messages = $messages->sortBy('id');
作为更好的选择,您可以对所有消息进行排序,只需一个查询:
$messages = Messages::where([['user_1', $user_id], ['user_2', $user_second->id]])
->orWhere([['user_2', $user_id], ['user_1', $user_second->id]])
->orderBy('id', 'asc')
->get()
这与编写此 SQL 相同:
select * from messages
where (user_1 = $user_id and user_2 = $user_second->id)
or (user_2 = $user_id and user_1 = $user_second->id)
order by id asc
关于php - Laravel - 如何按 ID 升序对对象数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57435182/