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 () 시도했지만 주사위가 없습니다!
도움을 주셔서 미리 감사드립니다.
내 테이블 :
id project_id author_id recipient_id message created_at updated_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] 삭제
몇 마디 만하겠습니다