我将使用什么 laravel 查询来 groupBy('author_id') 但最新的结果。现在,我尝试的所有操作都会得出第一个结果。我试过使用 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() 但没有骰子!
在此先感谢您的帮助。
我的表:
编号 项目编号 作者编号 收件人编号 信息 创建时间 更新时间
最佳答案
创建一个以这种方式获取每个作者最新消息 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');
}
关于php - 如何GroupBy上组的最新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40392258/