在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中文網其他相關文章!