2017-03-25 1 views
0

나는 쿼리에 몇 가지 문제가있다. 테이블에서 각 '카테고리'에 대한 최신 레코드를 가져 오려고하지만 Laravel에 쿼리를 작성하는 방법을 알 수 없습니다.MySQL to Eloquent query

나는 MySQL에서 작동하는 쿼리를 얻었지만, 실제로 번역 할 필요는 없다.

MySQL의 쿼리는 다음과 같습니다

SELECT * 
FROM messages 
WHERE id IN (
    SELECT MAX(id) 
    FROM messages 
    GROUP BY conversation_id 
); 

내가 Laravel에서이 같은 시도했지만 작동하지 않는 것 :

return self::where(function($query){ 
     $query->select(max(['id'])) 
     ->from('messages') 
     ->groupBy('conversation_id'); 
    }) 
    ->get(); 
+1

가능한 중복의 : http://stackoverflow.com/questions/16815551/how-to-do-this-in-laravel-subquery-where-in 최종 쿼리는 어떤 관심 들어, 다음과 같습니다 http://stackoverflow.com/questions/27064678/how-to-create-a-subquery-using-laravel-eloquent – AlexM

답변

0

(의 대신에 게시 됨 OP).

AlexM의 의견에 감사드립니다.

return self::whereIn('id', function($query){ 
     $query->select(max(['id'])) 
     ->from('messages') 
     ->orderBy('created_at', 'desc') 
     ->groupBy('conversation_id'); 
    }) 
    ->get(); 

제 첫 번째 해결책이되었지만 제대로 작동하지 않았습니다. 의도 한대로 두 개의 레코드를 선택했지만 마지막 레코드는 선택하지 않았습니다.

그런 다음 select를 대신 사용하여 select를 사용하여 아이디어를 완벽하게 해결했습니다.

return self::whereIn('id', function($query){ 
     $query->selectRaw('max(id)') 
     ->from('messages') 
     ->orderBy('created_at', 'desc') 
     ->groupBy('conversation_id'); 
    }) 
    ->get();