如何使用 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 的記錄。最後,我們包含一個 WHERE 子句來排除右表 (s1) 中具有匹配 seller_id 的任何記錄,從而有效地隔離每個 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 的流暢介面中。它會傳回快照表中存在的每個不同 seller_id 的最新記錄的集合。

以上是如何使用 Laravel Eloquent 檢索列中每個唯一值的最新記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!