Laravel 教學:將指定的資料排序優先的方法,使用 Eloquent Query Builder

在 Laravel 中,Eloquent 提供了方便的 Query Builder 讓我們可以動態查詢資料。如果我們希望 讓特定 id 排在前面,其他資料按照時間排序,可以使用 orderByRaw 搭配 FIELD() 函數來實現。

目標

我們要在 Eloquent Query Builder 中:

  1. 取得 agency_id 對應的資料

  2. 讓特定的 girl_id 排在最前面

  3. 其餘資料按照 created_at 由新到舊排序

方法 1:基本用法

如果你已經有一個 Eloquent 模型,例如 GirlAgencyPhoto,可以這樣查詢:

$priorityGirlIds = [7, 3, 10]; // 這些 girl_id 需要排在最前面
$agency_id = 1; // 要查詢的 agency_id

$photos = GirlAgencyPhoto::where('agency_id', $agency_id)
    ->orderByRaw("FIELD(girl_id, " . implode(',', $priorityGirlIds) . ") DESC")
    ->orderBy('created_at', 'desc')
    ->get();

說明

  1. where('agency_id', $agency_id):篩選符合 agency_id 的資料。

  2. orderByRaw("FIELD(girl_id, ...")

    • $priorityGirlIds 內的 girl_id 排在最前面。

    • FIELD(girl_id, 7, 3, 10) 會讓 girl_id = 7310 的資料優先排序。

  3. orderBy('created_at', 'desc')

    • 其餘 girl_id 的資料依照 created_at 降冪排序(最新的在前)。

 

方法 2:包裝成 Eloquent Model 方法

如果這段程式碼會經常使用,建議封裝成 Model 靜態函式,這樣程式碼更整潔、更好維護。

修改 GirlAgencyPhoto Model

class GirlAgencyPhoto extends Model
{
    protected $table = 'girl_agency_photos';

    public static function getCachedAgencyPhotos($agency_id, array $priorityGirlIds = [])
    {
        return Cache::remember('girl_photos_' . $agency_id, 86400, function () use ($agency_id, $priorityGirlIds) {
            $query = self::where('agency_id', $agency_id);

            if (!empty($priorityGirlIds)) {
                $query->orderByRaw("FIELD(girl_id, " . implode(',', $priorityGirlIds) . ") DESC");
            }

            return $query->orderBy('created_at', 'desc')->get();
        });
    }
}

 

如何使用這個方法

當你需要查詢資料時,只需要這樣呼叫:

$agency_id = 1;
$priorityGirlIds = [7, 3, 10];

$photos = GirlAgencyPhoto::getCachedAgencyPhotos($agency_id, $priorityGirlIds);

 

這樣的優點

封裝在 Model 中:讓查詢更容易維護,避免重複寫相同的查詢語法。
支援快取:使用 Cache::remember(),減少頻繁查詢資料庫的負擔。
支援靈活排序:傳入不同的 $priorityGirlIds,可動態調整排序方式。

 

課程推薦

用 AI 生成網站? AI 高效網站設計實戰課:ChatGPT X HTML X SEO

用 AI 生成網站? AI 高效網站設計實戰課:ChatGPT X HTML X SEO

利用 AI 提升網站設計效率與 SEO 排名!了解如何透過 ChatGPT 等工具快速建立 HTML 架構,優化關鍵字與用戶體驗,讓網站更具競爭力。

輸入折扣碼 TC1533SL 還可以額外獲得 NT$500 優惠喔。

AI工作術全面學習實戰營:6 堂精選課程,學會最好用 AI 工具,翻轉你的人生

AI工作術全面學習實戰營:6 堂精選課程,學會最好用 AI 工具,翻轉你的人生

《PChome雜誌》攜手 5 位在 AI 領域的專業講師,打造上述 6 堂實用課程,教你學會時下最好用的 AI 工具,導入生成式 AI 來產製工作內容,改造並升級你的工作流程。

輸入折扣碼 ZERO2024 還可以額外獲得 NT$400 優惠喔。

HTML與SEO實戰應用—並以ChatGPT助力提升網站品質與流量

HTML與SEO實戰應用—並以ChatGPT助力提升網站品質與流量

本課程專為希望深入了解 HTML 並有效結合 SEO 策略的學員設計。我們將重點放在 HTML 的深度學習與應用上,同時穿插介紹如何透過搜索引擎優化提升網站能見度。透過即時互動式的直播教學,加上 ChatGPT 的輔助,您將學習到如何建立一個結構優良、美觀且符合 SEO 標準的網站。這不僅會提升網站的用戶體驗,還會大幅提高網站的搜索引擎排名,進而增加訪客流量和潛在客戶。
用AI強化職場競爭力 ChatGPT、Midjourney從入門到精通

用AI強化職場競爭力 ChatGPT、Midjourney從入門到精通

在快速變遷的職場中,提升競爭力成為關鍵。透過引領潮流的AI技術,ChatGPT和Midjourney將助您勇攀高峰。無論您是AI新手還是專家,這個課程將引導您從入門到精通,解密AI的奧秘,並學習如何運用於職場。
GitHub Copilot AI 程式碼編輯工具應用實務班

GitHub Copilot AI 程式碼編輯工具應用實務班

讓學員瞭解有效地使用該工具來加速開發流程、提高程式碼品質和生產力。課程重點放在以 JavaScript 程式語言為例,介紹 Copilot 的基本原理、使用方法和最佳實踐。

輸入折扣碼 TC1456JA 還可以額外獲得 NT$500 優惠喔。

ChatGPT X Clipchamp AI 生成影片、配音與字幕應用實戰班

ChatGPT X Clipchamp AI 生成影片、配音與字幕應用實戰班

掌握Clipchamp AI的操作技巧,靈活運用Clipchamp AI進行影片編輯和創作,實現創意表達和傳播目的。

輸入折扣碼 TC1451JAN 還可以額外獲得 NT$500 優惠喔。

如何串接多種數位工具資訊?Looker Studio 資料視覺化實戰班|GoogleAds x FB廣告 x GA流量數據

如何串接多種數位工具資訊?Looker Studio 資料視覺化實戰班|GoogleAds x FB廣告 x GA流量數據

Looker Studio除了可協助使用者監控網站流量、廣告成效、選擇匯入資源的管道之外,還可以將數據資料多平台整合、數據報表即時更新、數據範本可重複套用的效益,透過自動化系統,將數據全部匯入同一個報表平台,是企業不可或缺的重要工具。

輸入折扣碼 TC1270JIA 還可以額外獲得 NT$500 優惠喔。

和我們交流

加入我們的社群,裡面會有一些技術的內容、有趣的技術梗,以及職缺的分享,歡迎和我們一起討論。