我一直在查看 Laravel Collections 的文档和 API,但似乎没有找到我想要的东西:
我想从集合中检索包含模型数据的数组,但只获取指定的属性。
即类似 Users::toArray('id','name','email')
的东西,其中集合实际上包含用户的所有属性,因为它们在其他地方使用,但在这个特定的地方我需要一个包含用户数据的数组,并且只有指定的属性。
在 Laravel 中似乎没有这个助手? - 我怎样才能做到这一点最简单的方法?
原文由 preyz 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以使用现有
Collection
方法的组合来执行此操作。一开始可能有点难以理解,但应该很容易分解。解释
首先,
map()
方法基本上只是遍历Collection
,并将Collection
中的每个项目传递给传入的回调。回调的每次调用返回的值构建由map()
方法生成的新Collection
。collect($user->toArray())
只是从Users
属性中构建一个新的临时Collection
。->only(['id', 'name', 'email'])
将临时Collection
减少到仅指定的那些属性。->all()
将临时的Collection
转换回普通数组。把它们放在一起,你会得到“对于 users 集合中的每个用户,返回一个仅包含 id、name 和 email 属性的数组。”
Laravel 5.5 更新
Laravel 5.5 在模型上添加了一个
only
方法,它与collect($user->toArray())->only([...])->all()
基本上做同样的事情,所以这可以在 5.5+ 中稍微简化为:如果你将它与 Laravel 5.4 中引入 的集合的“高阶消息传递” 结合起来,它可以进一步简化: