”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 理解 Laravel 11 中 pluck() 和 select() 之间的区别

理解 Laravel 11 中 pluck() 和 select() 之间的区别

发布于2024-11-08
浏览:957

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]删除
最新教程 更多>
  • 如何使用node-mysql在单个查询中执行多个SQL语句?
    如何使用node-mysql在单个查询中执行多个SQL语句?
    Multi-Statement Query Support in Node-MySQLIn Node.js, the question arises when executing multiple SQL statements in a single query using the node-mys...
    编程 发布于2025-05-01
  • Java跨平台获取活动窗口或进程列表方法
    Java跨平台获取活动窗口或进程列表方法
    如何使用Java 答案: 从“ ps -e”命令: ,将代码修改如下:此方法应提供所需的运行Windows或Processes的列表。
    编程 发布于2025-05-01
  • 如何从PHP中的Unicode字符串中有效地产生对URL友好的sl。
    如何从PHP中的Unicode字符串中有效地产生对URL友好的sl。
    为有效的slug生成首先,该函数用指定的分隔符替换所有非字母或数字字符。此步骤可确保slug遵守URL惯例。随后,它采用ICONV函数将文本简化为us-ascii兼容格式,从而允许更广泛的字符集合兼容性。接下来,该函数使用正则表达式删除了不需要的字符,例如特殊字符和空格。此步骤可确保slug仅包含...
    编程 发布于2025-05-01
  • 为什么我在Silverlight Linq查询中获得“无法找到查询模式的实现”错误?
    为什么我在Silverlight Linq查询中获得“无法找到查询模式的实现”错误?
    查询模式实现缺失:解决“无法找到”错误在Silverlight应用程序中,尝试使用LINQ建立LINQ连接以错误而实现的数据库”,无法找到查询模式的实现。”当省略LINQ名称空间或查询类型缺少IEnumerable 实现时,通常会发生此错误。 解决问题来验证该类型的质量是至关重要的。在此特定实例中...
    编程 发布于2025-05-01
  • Pandas多字段分组差异计算方法
    Pandas多字段分组差异计算方法
    Grouped Differences in Pandas with Multiple FieldsIn this situation, we aim to calculate the differences in scores for different site and country comb...
    编程 发布于2025-05-01
  • eval()vs. ast.literal_eval():对于用户输入,哪个Python函数更安全?
    eval()vs. ast.literal_eval():对于用户输入,哪个Python函数更安全?
    称量()和ast.literal_eval()中的Python Security 在使用用户输入时,必须优先确保安全性。强大的python功能eval()通常是作为潜在解决方案而出现的,但担心其潜在风险。 This article delves into the differences betwee...
    编程 发布于2025-05-01
  • C++中如何将独占指针作为函数或构造函数参数传递?
    C++中如何将独占指针作为函数或构造函数参数传递?
    在构造函数和函数中将唯一的指数管理为参数 unique pointers( unique_ptr [2启示。通过值: base(std :: simelor_ptr n) :next(std :: move(n)){} 此方法将唯一指针的所有权转移到函数/对象。指针的内容被移至功能中,在操作...
    编程 发布于2025-05-01
  • 在Python中如何创建动态变量?
    在Python中如何创建动态变量?
    在Python 中,动态创建变量的功能可以是一种强大的工具,尤其是在使用复杂的数据结构或算法时,Dynamic Variable Creation的动态变量创建。 Python提供了几种创造性的方法来实现这一目标。利用dictionaries 一种有效的方法是利用字典。字典允许您动态创建密钥并分...
    编程 发布于2025-05-01
  • 在Go语言中如何简洁定义10的幂常量
    在Go语言中如何简洁定义10的幂常量
    在GO 利用浮点线文字一种简洁的方式是使用浮点文字,该方法是使用floingpoint protals。写作1E3比写作1000更有效。这是一个示例(67个没有空间的字符):的文字用于未构图的整数常数,我们可以将1000用于KB,并用KB将随后的常量乘以KB,如下所示(77个没有空格的字符):,作...
    编程 发布于2025-05-01
  • PHP未来:适应与创新
    PHP未来:适应与创新
    PHP的未来将通过适应新技术趋势和引入创新特性来实现:1)适应云计算、容器化和微服务架构,支持Docker和Kubernetes;2)引入JIT编译器和枚举类型,提升性能和数据处理效率;3)持续优化性能和推广最佳实践。 引言在编程世界中,PHP一直是网页开发的中流砥柱。作为一个从1994年就开始发展...
    编程 发布于2025-05-01
  • 解决MySQL插入Emoji时出现的\\"字符串值错误\\"异常
    解决MySQL插入Emoji时出现的\\"字符串值错误\\"异常
    Resolving Incorrect String Value Exception When Inserting EmojiWhen attempting to insert a string containing emoji characters into a MySQL database us...
    编程 发布于2025-05-01
  • Pandas长格式转宽格式详解:逐步指南
    Pandas长格式转宽格式详解:逐步指南
    在pandas中从长到宽的数据:综合指南 将数据从长到宽的格式转换为pandas,尤其是在使用Melt/stack/stack/unstack方法时。例如,考虑以下长格式数据框架:, “高度”:[6,6,6,5], “产品”:['蝙蝠',“球”,“魔杖”,“笔”],...
    编程 发布于2025-05-01
  • 如何简化PHP中的JSON解析以获取多维阵列?
    如何简化PHP中的JSON解析以获取多维阵列?
    php 试图在PHP中解析JSON数据的JSON可能具有挑战性,尤其是在处理多维数组时。 To simplify the process, it's recommended to parse the JSON as an array rather than an object.To do...
    编程 发布于2025-05-01
  • 如何限制动态大小的父元素中元素的滚动范围?
    如何限制动态大小的父元素中元素的滚动范围?
    在交互式接口中实现垂直滚动元素的CSS高度限制问题:考虑一个布局,其中我们具有与用户垂直滚动一起移动的可滚动地图div,同时与固定的固定sidebar保持一致。但是,地图的滚动无限期扩展,超过了视口的高度,阻止用户访问页面页脚。$("#map").css({ marginT...
    编程 发布于2025-05-01
  • 在C#中如何高效重复字符串字符用于缩进?
    在C#中如何高效重复字符串字符用于缩进?
    在基于项目的深度下固定字符串时,重复一个字符串以进行凹痕,很方便有效地有一种有效的方法来返回字符串重复指定的次数的字符串。使用指定的次数。 constructor 这将返回字符串“ -----”。 字符串凹痕= new String(' - ',depth); console.Wr...
    编程 发布于2025-05-01

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3