Laravel Eloquentを使用して列内の各一意の値の最新レコードを取得する方法は?

Susan Sarandon
リリース: 2024-10-26 12:55:02
オリジナル
701 人が閲覧しました

How to Retrieve the Latest Records for Each Unique Value in a Column using Laravel Eloquent?

Laravel Eloquent で Max Created_at を使用してすべての行を取得する方法

Laravel の Eloquent ORM では、個別の値ごとに最新の行を取得する必要があるシナリオが発生する場合があります。特定の列で。これは、サブクエリと集計関数を組み合わせて使用​​することで実現できます。

次の列を含むデータベース テーブルがあるシナリオを考えてみましょう。

id  seller_id   amount   created_at
ログイン後にコピー

最新のデータを取得するとします。一意のseller_idごとにレコードを作成します。生の SQL クエリを使用してこれを実現する方法は次のとおりです。

<code class="sql">select s.*
from snapshot s
left join snapshot s1 on s.seller_id = s1.seller_id
and s.created_at < s1.created_at
where s1.seller_id is null
ログイン後にコピー

このクエリでは、左結合を利用して、スナップショット テーブル (s というエイリアス) 内の各レコードを、同じデータを持つ他のすべてのレコードと比較します。販売者ID。次に、AND 条件を使用して、s.created_at が s1.created_at より小さいレコードを除外します。最後に、右側のテーブル (s1) で一致する sell_id を持つレコードを除外する WHERE 句を組み込み、各 seller_id の最新レコードを効果的に分離します。

Laravel クエリ ビルダーを使用して同じ結果を達成するには、次のようにします。次のコードを実行できます:

<code class="php">DB::table('snapshot as s')
  ->select('s.*')
  ->leftJoin('snapshot as s1', function ($join) {
        $join->on('s.seller_id', '=', 's1.seller_id')
             ->whereRaw(DB::raw('s.created_at < s1.created_at'));
   })
  ->whereNull('s1.seller_id')
  ->get();</code>
ログイン後にコピー

このクエリビルダーのアプローチは、生の SQL クエリのロジックを反映し、Laravel の滑らかなインターフェイス内にカプセル化します。スナップショット テーブルに存在する個別の sell_id ごとに、最新のレコードのコレクションを返します。

以上がLaravel Eloquentを使用して列内の各一意の値の最新レコードを取得する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!