我已经找到了很多关于这个问题的帖子,但是没有解决的办法。
也许是因为我的拉拉版本。是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是未定义的。
这是非常有效的:
$result = DB::connection('mysql_live')->table('user_chatmessages')
->where(function ($query) {
$query->where('from_user', '1')->where('to_user', '2');
})->orWhere(function ($query) {
$query->where('from_user', '2')->where('to_user', '1');
})->orderBy('date_added', 'asc')->get();发布于 2019-09-12 14:10:03
为什么不在一个查询中恢复所有的结果?
result_a = DB::connection('mysql_live')
->table('user_chatmessages')
->where('from_user', $data->chat_from_user)
->orWhere('to_user', $data->chat_from_user)
->orderBy('date_added', 'desc')
->get();如果您有默认的时间戳字段,则为->orderBy('created_at', 'desc')。
编辑
为了恢复两个特定用户之间的聊天,您需要使用括号。
result_a = DB::connection('mysql_live')
->table('user_chatmessages')
->where(function($query) use($data) {
$query->where('from_user', $data->chat_from_user)
->where('to_user', $data->chat_to_user);
})
->orWhere(function($query) use($data) {
$query->where('to_user', $data->chat_from_user)
->where('from_user', $data->chat_to_user);
})
->orderBy('date_added', 'desc')
->get();发布于 2019-09-12 14:19:05
您可以直接获得数据,而无需像这样使用合并:
result = DB::connection('mysql_live')
->table('user_chatmessages')
->where(function($query) use ($data){
$query->where('from_user', $data->chat_from_user)->orWhere('to_user', $data->chat_from_user)
})->orderBy('date_added','desc')
->get();发布于 2019-09-12 15:14:12
如果要使用两个查询,那么可以使用union。
子查询
$subQuery = DB::connection('mysql_live')
->table('user_chatmessages')
->where('from_user', $data->chat_from_user);在主查询上使用并添加子查询
$results = DB::connection('mysql_live')
->table('user_chatmessages')
->where('to_user', $data->chat_from_user)
->union($subQuery) //see
->orderBy('date_added', 'desc') //see
->get();这应该能行。您可以使用任何查询,只需将它们合并,以避免合并到集合中,然后按date_added排序。
https://stackoverflow.com/questions/57908531
复制相似问题