2017-03-25 9 views
0

私はクエリでいくつかの問題を抱えてきました。私はテーブルから各カテゴリの最新のレコードを取得しようとしていますが、Laravelでクエリを書く方法を理解できません。MySQLからEloquentクエリ

私は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(); 

私の最初の解決策でしたが、うまくいきませんでした。意図したとおりに2つのレコードを選択していましたが、最後のレコードは選択しませんでした。

私は、selectの代わりにselectRawを使うという考えを思いついたので、私の問題を完全に解決しました。

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