環境
Laravel Framework 7.29.3
Eloquent
message_table
id | user_id | message | created_at | updated_at |
---|---|---|---|---|
1 | 1 | テキスト | 2022-2-15 | 2022-2-15 |
2 | 1 | テキスト | 2022-2-15 | 2022-2-15 |
3 | 2 | テキスト | 2022-2-15 | 2022-2-15 |
4 | 2 | テキスト | 2022-2-15 | 2022-2-15 |
5 | 3 | テキスト | 2022-2-15 | 2022-2-15 |
6 | 2 | テキスト | 2022-2-15 | 2022-2-15 |
7 | 3 | テキスト | 2022-2-15 | 2022-2-15 |
8 | 3 | テキスト | 2022-2-15 | 2022-2-15 |
このようなメッセージテーブルがあり、下に行くほど新しくなります。
ここからidが新しい順に並べ替え各ユーザーの最新のメッセージのみを取得したいです。
(重複するuser_idの古いレコードは排除してレコードを取得したいです)
上記の場合、最終的に取得したいレコードは以下のような形です
id | user_id | message | created_at | updated_at |
---|---|---|---|---|
8 | 3 | テキスト | 2022-2-15 | 2022-2-15 |
6 | 2 | テキスト | 2022-2-15 | 2022-2-15 |
2 | 1 | テキスト | 2022-2-15 | 2022-2-15 |
新しい順に並べ替え重複するuser_idを持つレコードを排除しています。
思いついたこと
$rows = Message::orderBy('id','desc')->distinct()->select('user_id')->get();
個人的に調べた範囲でできたのこんな感じのコードになったのですが上記では確かに重複分は消えたのですがuser_idしか帰ってこず困っています。
Eloquentでどのようにすれば望む結果が得られるでしょうか?(クエリビルダでも大丈夫です)
ご助力いただけると幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。