php - Laravel - 如何按 ID 升序对对象数组进行排序

标签 php mysql arrays laravel sorting

我需要按名为 $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/

相关文章:

javascript - 在 Javascript 中将键值对附加到数组

php - 为什么 PHP 需要闭包的 use 运算符?

PHP:如何使用 monolog 登录到控制台 (php://out)?

PHP Tidy 删除空格并插入换行符

php - Zend Mysql 获取 ENUM 值

php - 解析错误 : syntax error, C :\wamp64\www\PHP\New\input. php 中的意外文件结尾第 25 行

arrays - 大小大于 2147483647 的 BooleanArray

php - Json未定义错误

MySQL 错误 - #1062 - key 2 的重复条目 ' '

C 程序来计算给定字符串/句子中的单词数?