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 サイトの他の関連記事を参照してください。