」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 理解 Laravel 11 中 pluck() 和 select() 之間的差異

理解 Laravel 11 中 pluck() 和 select() 之間的差異

發佈於2024-11-08
瀏覽:616

Understanding the Difference Between pluck() and select() in Laravel 11

Laravel 是最受歡迎的 PHP 架構之一,提供了一系列強大的資料操作方法。其中,pluck() 和 select() 在處理集合時經常使用。儘管它們看起來相似,但它們的目的卻不同。在本文中,我們將探討這兩種方法之間的差異,解釋何時使用每種方法,並提供實際的編碼範例來示範它們在 Laravel 11 中的用法。

什麼是 pluck()?

pluck() 方法旨在從集合中的單一鍵中提取值。當您想要從陣列或物件集合中檢索特定屬性時,它特別方便。

pluck() 的範例

假設您有一系列產品,並且您只想提取產品名稱:

$collection = collect([
    ['product_id' => 'prod-100', 'name' => 'Desk'],
    ['product_id' => 'prod-200', 'name' => 'Chair'],
]);

// Pluck only the names of the products
$plucked = $collection->pluck('name');

$plucked->all();
// Output: ['Desk', 'Chair']

此外,您可以使用 pluck() 將自訂鍵指派給結果集合:

$plucked = $collection->pluck('name', 'product_id');

$plucked->all();
// Output: ['prod-100' => 'Desk', 'prod-200' => 'Chair']

使用 pluck() 嵌套值

pluck() 方法也支援使用點表示法來擷取巢狀值:

$collection = collect([
    [
        'name' => 'Laracon',
        'speakers' => [
            'first_day' => ['Rosa', 'Judith'],
        ],
    ],
    [
        'name' => 'VueConf',
        'speakers' => [
            'first_day' => ['Abigail', 'Joey'],
        ],
    ],
]);

$plucked = $collection->pluck('speakers.first_day');

$plucked->all();
// Output: [['Rosa', 'Judith'], ['Abigail', 'Joey']]

處理重複項

處理具有重複鍵的集合時,pluck() 將使用與每個鍵關聯的最後一個值:

$collection = collect([
    ['brand' => 'Tesla',  'color' => 'red'],
    ['brand' => 'Pagani', 'color' => 'white'],
    ['brand' => 'Tesla',  'color' => 'black'],
    ['brand' => 'Pagani', 'color' => 'orange'],
]);

$plucked = $collection->pluck('color', 'brand');

$plucked->all();
// Output: ['Tesla' => 'black', 'Pagani' => 'orange']

什麼是選擇()?

Laravel 中的 select() 方法更類似於 SQL 的 SELECT 語句,允許您從集合中選擇多個鍵並僅傳回這些鍵作為新集合。

select() 的範例

讓我們考慮要檢索名稱和角色的使用者集合:

$users = collect([
    ['name' => 'Taylor Otwell', 'role' => 'Developer', 'status' => 'active'],
    ['name' => 'Victoria Faith', 'role' => 'Researcher', 'status' => 'active'],
]);

$selectedUsers = $users->select(['name', 'role']);

$selectedUsers->all();
// Output: [
//     ['name' => 'Taylor Otwell', 'role' => 'Developer'],
//     ['name' => 'Victoria Faith', 'role' => 'Researcher'],
// ]

透過select(),可以一次從集合中拉取多個屬性。

pluck() 和 select() 之間的主要區別

  • 目的

    • pluck() 用於從集合中提取單一屬性或鍵值對。
    • select() 用於從集合中的每個項目中檢索多個屬性,類似於 SQL 查詢。
  • 返回結構:

    • 當提供第二個鍵時,pluck() 傳回值的平面數組或關聯數組。
    • select() 傳回僅包含指定鍵的陣列集合。
  • 用法

    • 當您需要特定鍵的值清單時,請使用 pluck()。
    • 當您需要集合中每個元素的多個欄位時,請使用 select()。

何時使用哪一個?

  • :

    時使用 pluck()
    • 您需要從單一鍵中提取值。
    • 您正在處理嵌套資料並想要檢索特定的嵌套屬性。
  • :

    時使用 select()
    • 您需要檢索多個鍵或屬性。
    • 您想要重組資料以專注於某些欄位。

結論

在 Laravel 11 中,pluck() 和 select() 都提供了靈活的方法來操作集合。 pluck() 簡化了提取單一屬性的過程,而 select() 在需要處理多個屬性時為您提供了更多控制權。了解這兩種方法之間的差異可以讓您優化資料操作流程並編寫更清晰、更有效率的程式碼。

透過掌握 pluck() 和 select(),您可以在 Laravel 應用程式中輕鬆處理複雜的資料結構。快樂編碼!

版本聲明 本文轉載於:https://dev.to/asfiaaiman/understanding-the-difference-between-pluck-and-select-in-laravel-11-398i?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 受 Go 啟發的處理 fetch API 的方法
    受 Go 啟發的處理 fetch API 的方法
    Javascript錯誤處理有時會令人困惑,特別是在使用fetch時,如果您使用await,則需要將其包裝在try catch區塊中來處理錯誤,我們都知道這是頭痛 如果我告訴你我們可以做這樣的事情怎麼辦 import { get } from "./eavfetch"; interface Book...
    程式設計 發佈於2024-11-08
  • C 和 C++ 中的內聯函數
    C 和 C++ 中的內聯函數
    介绍 C添加了inline关键字,可以为函数定义添加前缀,如: inline int max_int( int a, int b ) { return a > b ? a : b; } 给编译器一个“提示”,程序总体上可能会从内联函数.中受益 已内联的函数在调用它的每...
    程式設計 發佈於2024-11-08
  • JavaScript 初學者:精進基礎所需了解的一切
    JavaScript 初學者:精進基礎所需了解的一切
    JavaScript 入門?這是你應該知道的! JavaScript 可以說是網路上最強大且同時流行的程式語言,推動著從互動式網站到行動應用程式的一切。如果您剛開始嘗試深入研究 JavaScript,那似乎相當令人畏懼。好處是 JavaScript 對初學者很友好,而且即時練習也很容易。下面,您可...
    程式設計 發佈於2024-11-08
  • PHP 可以傳遞匿名函數作為參數嗎?
    PHP 可以傳遞匿名函數作為參數嗎?
    在 PHP 中將函數作為參數傳遞在 PHP 中,透過在 PHP 5.3 中引入匿名函數,可以接受函數作為參數。 0及以上。這為更動態和模組化的程式設計提供了可能性。 匿名函數可讓您定義沒有名稱的函數。它們通常被定義為 lambda 表達式,您可以在其中指定參數和要執行的程式碼。例如:$anonFun...
    程式設計 發佈於2024-11-08
  • 下載網頁到ESP或簡單可程式控制器
    下載網頁到ESP或簡單可程式控制器
    為了將網頁儲存到ESP8266的FLASH中,我特地用delphi編寫了一個軟體工具。 該軟體工具從一個資料夾中讀取所有網頁檔案(包括html、css、js、圖片等),並將其打包為二進位檔案。 將ESP8266的GPIO0接地即可啟動,ESP8266進入串口下載模式。 然後使用下載軟體選擇打包...
    程式設計 發佈於2024-11-08
  • 保護您的資料:如何建立不可破解的 SQL 和 MySQL 資料庫副本
    保護您的資料:如何建立不可破解的 SQL 和 MySQL 資料庫副本
    鎖定前規劃的審慎措施可確保 SQL 或 MySQL 資料庫一旦轉換為唯讀狀態,即可按預期運行,並且仍可供指定使用者群組存取。這種遠見也保證了資料庫在將來需要更新或更改時可以安全地解鎖。 將資料庫設定為唯讀有一定的吸引力,這會引起 DBA 的共鳴。就好像資料庫已經成熟並準備好走向世界,不受不斷更新需...
    程式設計 發佈於2024-11-08
  • 使用攔截器自訂獲取並在 nuxt 3 中登錄
    使用攔截器自訂獲取並在 nuxt 3 中登錄
    如果您使用過 Nuxt,您可能遇到過方便的 useFetch 可組合項目: <script setup lang="ts"> const { data, status, error, refresh, clear } = await useFetch('/api/modules') &l...
    程式設計 發佈於2024-11-08
  • React原始碼中MessageChannel的使用
    React原始碼中MessageChannel的使用
    這篇文章我們分析React原始碼中MessageChannel的用法。 我們先來了解什麼是MessageChannel。 訊息頻道 Channel Messaging API 的 MessageChannel 介面允許我們建立一個新的訊息通道並透過它的兩個 MessagePort...
    程式設計 發佈於2024-11-08
  • 如何在 CSS 中縮排後續換行標籤行?
    如何在 CSS 中縮排後續換行標籤行?
    縮排換行標籤文字的後續行當面臨表單寬度的限制時,標籤文字可以換行到多行,從而美觀的擔憂。雖然第一行由於輸入元素的存在而縮進,但後續行可能不會縮進,從而產生不均勻的外觀。 要僅使用CSS 實現縮排的第二行和後續行,請考慮使用以下方法:要僅使用CSS 實現縮排的第二行和後續行,請考慮使用以下方法:將輸入...
    程式設計 發佈於2024-11-08
  • 如何在CSS中模糊背景影像而不模糊內容?
    如何在CSS中模糊背景影像而不模糊內容?
    CSS 在保持內容清晰度的同時對背景圖像進行模糊處理嘗試在CSS 設定中模糊背景圖像時,通常會遇到內容(文字或其他元素)也變得模糊的問題。這就是 z-index 和偽元素的概念發揮作用的地方。 要模糊背景圖像而不影響內容,可以採用以下方法:創建背景容器:將背景圖像包含在div或其他容器中並為其分配一...
    程式設計 發佈於2024-11-08
  • 啞的
    啞的
    大家好,我是Misti-sage,DOOF的唯一創造者: 動態的 輸出 針對進行了最佳化 靈活性。 (我是編碼新手,所以我的大部分(如果不是全部)DOOF 工作都是由 ChatGPT 協助的。) 我歡迎任何可以幫助改進 DOOF(也稱為 Darfensmirg)的人。 <!DOCTYPE ...
    程式設計 發佈於2024-11-08
  • 為什麼 Go 正規表示式 \\b 邊界對於拉丁字元會失敗?
    為什麼 Go 正規表示式 \\b 邊界對於拉丁字元會失敗?
    \b Go 正規表示式中拉丁文字元的邊界在Go 正規表示式的世界中, \b 邊界選項有一個輕微的怪癖處理拉丁字符時。當嘗試定義包含拉丁字元(例如重音元音和特殊字元)的單字時,就會出現此問題。 考慮以下範例,我們希望使用 \b 邊界選項來匹配單字「vis」:import ( "fmt...
    程式設計 發佈於2024-11-08
  • Node.js 中與 WebSockets 和 Socket.IO 的即時通信
    Node.js 中與 WebSockets 和 Socket.IO 的即時通信
    现代 Web 应用程序通常需要实时通信,无论是聊天系统、实时更新、协作编辑还是通知。传统的 HTTP 通信不足以满足实时应用程序的需要,因为它依赖于请求-响应模式。这就是 WebSockets 发挥作用的地方,它允许服务器和客户端之间进行全双工通信。 在本文中,我们将探讨: WebSocket 是什...
    程式設計 發佈於2024-11-08
  • H2 與 HSQLDB:哪種嵌入式資料庫最適合我的財務管理應用程式?
    H2 與 HSQLDB:哪種嵌入式資料庫最適合我的財務管理應用程式?
    Java 嵌入式資料庫比較鑑於有大量可用選項,為您的財務管理應用程式選擇嵌入式資料庫可能具有挑戰性。為了幫助您,讓我們根據您的需求比較 H2、HSQLDB、Derby 和 Berkeley DB。 H2 與 HSQLDBH2 和 HSQLDB 都提供出色的效能和穩定性。 H2以速度著稱,而HSQLD...
    程式設計 發佈於2024-11-08
  • C 中允許多少級指標間接定址?
    C 中允許多少級指標間接定址?
    C 語言中的指標深度:了解層級限制在 C 程式設計中,變數可以使用指標具有多層間接尋址。這種靈活性允許複雜的資料結構和高效的記憶體管理。然而,問題出現了:單一變數允許的最大指標等級(稱為“*”)是多少? 了解指針深度的限制對於有效和安全的編程至關重要。 C 標準定義了允許的指標等級數的下限,但上限是...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3