我发现了很多关于这个问题的帖子,但没有解决方案。
也许是因为我的 laravel 版本。它的 5.7。
我有两个结果,如下所示:
result_a = DB::connection('mysql_live')->table('user_chatmessages')
->where('from_user', $data->chat_from_user)->get();
$result_b = DB::connection('mysql_live')->table('user_chatmessages')
->where('to_user', $data->chat_from_user)->get();
现在我合并它们,效果很好:
$merged = $result_a->merge($result_b);
$result = $merged->values()->sortByDesc('date_added');
排序不会影响整个结果。问题是排序先排序result_a,然后排序result_b。
我尝试了很多不同的语法变体:
$result = $result_a->merge($result_b)->sortBy('date_added');
$merged = $result_a->merge($result_b);
$result = $merged->sortByDesc('date_added');
$merged = $result_a->merge($result_b)->sortByDesc('date_added');
$result = $merged->all();
$result = ($result_a->merge($result_b))->sortBy('date_added');
可能更重要的是,我已经在这个问题上坐了很长时间,我发现的只是看起来超级简单并且人们告诉它有效的线程。
我也尝试以ID相同的结果进行排序。
编辑
如果您想获取某个用户的所有接收和发送的消息,@N69S 提供的替代解决方案适用于这种情况。
但是,您如何使用相同的方法在两个特定用户之间获取消息?例如,我想获取 ID 为 1 的用户和 ID 为 2 的用户之间的聊天消息,这将不起作用:
$result = DB::connection('mysql_live')
->table('user_chatmessages')
->where('from_user', $data->chat_from_user)
->where('to_user', $data->chat_to_user)
->orWhere('from_user', $data->chat_to_user)
->orWhere('to_user', $data->chat_from_user)
->orderBy('date_added', 'desc')
->get();
我现在正在尝试的看起来像这样:
$result = DB::connection('mysql_live')->table('user_chatmessages')
->where(function ($query) use ($from, $to) {
$query->where('from_user', $from)->where('to_user', $to);
})->orWhere(function ($query) {
$query->where('from_user', $to)->where('to_user', $from);
})->orderBy('date_added', 'asc')->get();
但我得到一个错误: from & to 没有定义。
PIPIONE
MMMHUHU
陪伴而非守候