使用 pluck () 或者 modelKeys () 从 Eloquent Collection 中获 id 数组

在某些情况下,你需要获取集合/表中某些记录的 ID 数组。我将向你展示两种快速的实现方法-一种非常流行,另一种是直到今天才发现的功能。

想象一下,你有 hasMany() 关系-一个角色具有多个权限。然后需要按特定角色获取权限ID。

执行此操作的典型代码是使用 pluck() 函数:

// 返回ID数组
$permissionIDs = $role->permissions->pluck('id'); 

但是,如果自动递增主键名称不是 id,该怎么办?显然,你可以使用 Collection 上的 modelKeys() 方法从 Laravel 模型中获取密钥:

//与上述结果相同。甚至相同的字符数:)
$permissionIDs = $role->permissions->modelKeys();

官方描述 modelKeys() 方法很短:「获取主键数组」。

请注意,正如我之前所说,它适用于 Collections ,而不仅适用于 Laravel 模型。所以 Model 和 Collection 都存在方法 pluck(),所以两者都可以工作:

$allPermissions = Permission::pluck('id');
$permissions = $role->permissions->pluck('id');

但是如果使用 modelKeys(),它将失败并显示错误即调用未定义的方法App.ermission :: modelKeys()

$allPermissions = Permission::modelKeys();

解决方法是将所有结果都放入 Collection 中,然后获取密钥:

$allPermissions = Permission::all()->modelKeys();

但是,如果要获取大表的所有记录,可能会导致性能问题。

所以,对于 modelKeys() 这类方法,更像是获取的「有趣的知识」,而不是在日常项目中实际使用的方法 🙂

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://laraveldaily.com/eloquent-get-ar...

译文地址:https://learnku.com/laravel/t/39007

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 1

涨见识了 :+1:

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!