我要对groupBy('author_id')使用什么Laravel查询,但是要使用最新结果。现在,我尝试的所有方法都将获得第一个结果。我试过使用MAX(id)作为id sql函数,但是没有运气
它会找到记录,找到组中的第一条记录
这是我正在使用的模型查询:
public function lastMessages() {
return $this->hasMany('App\Message', 'recipient_id')->groupBy('author_id')->orderBy('created_at', 'DESC');
}
我也尝试过:
public function lastMessages() {
return $this->hasMany('App\Message', 'recipient_id')
->select(DB::raw('*, max(id) as id))
->groupBy('author_id')
->orderBy('id', 'desc');
}
我也尝试过这个,没有运气:
public function lastMessages() {
return $this->hasMany('App\Message', 'recipient_id')
->select(DB::raw('*, max(created_at) as created_at))
->groupBy('author_id')
->orderBy('created_at', 'desc');
}
以上所有内容将返回组author_id的第一行。我想返回每组的最后一行或最新的一行。我也尝试过-> latest(),没有骰子!
先谢谢您的帮助。
我的桌子:
编号project_id author_id收件人编号id消息已创建_已更新_at
创建一个子查询联接,该子查询联接将不再需要这种方式的每个作者最新消息ID,因为您已经在联接子查询中获取了每个作者最新消息ID,因此不再需要
不再需要max(created),因为您已经在每个组中获得了最新创建的消息
public function lastMessages() {
return $this->hasMany('App\Message', 'recipient_id')
->select('*')
->join(DB::raw('(Select max(id) as id from messages group by author_id) LatestMessage'), function($join) {
$join->on('messages.id', '=', 'LatestMessage.id');
})
->orderBy('created_at', 'desc');
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句