ホームページ >バックエンド開発 >PHPチュートリアル >Laravel Eloquent を使用してテーブル内の各固有の販売者の最新の行を取得するにはどうすればよいですか?
Laravel Eloquent を使用して Max Created_at で最新の行を取得する
Laravel Eloquent では、一意のフィールドごとに最新の行を取得できます。包括的なアプローチ。売上を追跡する特定のテーブルで、各エントリに id、seller_id、amount、created_at などのフィールドが含まれている場合、目的は、個別の sell_id ごとに最新の行を取得することです。
最新の取得特定の販売者の行
特定の販売者の最新の行を取得するために、Laravel Eloquent は簡単な方法を提供します。
<code class="php">$sales = Snapshot::where('seller_id', '=', 15) ->orderBy('created_at', 'DESC') ->first();</code>
このクエリは、スナップショット テーブルからすべてのレコードを選択します。 sell_id は 15 に等しく、created_at に基づいて降順で並べ替え、最初の行を取得して、事実上、その販売者の最新の売上を返します。
各販売者の最新の行の取得
このアプローチを拡張して個々の販売者の最新の行を取得するには、より高度な戦略が必要になります。次の 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
このクエリでは、サブクエリ s1 が条件 s.created_at <🎜 に基づいてレコードを選択します。 s1.created_at: 後続の行の created_at タイムスタンプが新しいレコードのみが含まれるようにします。次に、外側のクエリは、サブクエリに一致する行がないメイン テーブルからすべての行を選択し、各 seller_id の最新レコードを効果的に分離します。
Laravel Eloquent でのクエリの実装
Laravel Eloquent を使用してこのクエリを実装するには、クエリ ビルダー メソッドを利用できます。
<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 クエリの機能を複製します。 (s1) 各seller_idの後の行を識別します。 whereNull 条件は後続の行を持つ行をフィルターで除外し、各 seller_id の最新レコードのみを残します。このクエリを実行すると、テーブル内の各固有の販売者の最新の売上のコレクションが返されます。
以上がLaravel Eloquent を使用してテーブル内の各固有の販売者の最新の行を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。