【发布时间】:2021-11-27 19:57:17
【问题描述】:
我有两个表(users 和 messages).. 我写了一个查询来获取用户发送给我或我发送的所有消息,使用 JOIN .. 获取我联系过或他们联系过的所有用户.
如下代码所示:
$users = Message::join('users', function ($join) {
$join->on('messages.sender_id', '=', 'users.id')
->orOn('messages.receiver_id', '=', 'users.id');
})
->where(function ($q) {
$q->where('messages.sender_id', Auth::user()->id)
->orWhere('messages.receiver_id', Auth::user()->id);
})
->orderBy('messages.created', 'desc')
->groupBy('users.id')
->paginate();
这里的问题是当记录分组时,我得到的是旧消息而不是新消息,根据它的created_at ..所以,我想得到分组记录的最后一条记录。
【问题讨论】:
-
可以修改选中的字段添加MAX(created_at)吗?
-
@DaveS 在哪里?你能解释一下吗?
-
->select('users.id','messages.body','messages.created_at',DB::raw('MAX(messages.created_at) max_created_at')) 像这样?我做到了,但只是它为没有收到消息的响应添加了另一列
-
您是否在
Message模型上设置了发送者和接收者关系?另外,专栏肯定是created而不是created_at? -
以下是否回答了您的问题或您仍有问题?