使用 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 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
涨见识了 :+1: