首頁  >  文章  >  後端開發  >  如何使用 Laravel Eloquent 檢索表中每個唯一賣家的最新行?

如何使用 Laravel Eloquent 檢索表中每個唯一賣家的最新行?

Linda Hamilton
Linda Hamilton原創
2024-10-25 14:57:02166瀏覽

How can I retrieve the latest row for each unique seller in a table using Laravel Eloquent?

使用Laravel Eloquent 使用Max Created_at 檢索最新行

在Laravel Eloquent 中,可以透過以下方式檢索每個唯一的最新行全面的方法。在給定的追蹤銷售的表中,其中每個條目都包含 id、seller_id、amount 和created_at 等字段,目標是檢索每個不同 seller_id 的最新行。

檢索最新行特定賣家的行

要獲取特定賣家的最新行,Laravel Eloquent 提供了一種簡單的方法:

<code class="php">$sales = Snapshot::where('seller_id', '=', 15)
    ->orderBy('created_at', 'DESC')
    ->first();</code>

此查詢從Snapshot 表中選擇所有記錄,其中seller_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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn