gpt4 book ai didi

php - 仅从 Laravel 集合中获取特定属性

转载 作者:IT王子 更新时间:2023-10-28 23:55:38 29 4
gpt4 key购买 nike

我一直在查看 Laravel Collections 的文档和 API,但似乎没有找到我要找的东西:

我想从集合中检索包含模型数据的数组,但只能获取指定的属性。

即类似于 Users::toArray('id','name','email'),其中集合实际上包含用户的所有属性,因为它们在别处使用,但在这个特定位置我需要一个包含用户数据的数组,并且只有指定的属性。

在 Laravel 中似乎没有这方面的帮助? - 我怎样才能以最简单的方式做到这一点?

最佳答案

您可以使用现有 Collection 的组合来执行此操作方法。一开始可能有点难以理解,但应该很容易理解。

// get your main collection with all the attributes...
$users = Users::get();

// build your second collection with a subset of attributes. this new
// collection will be a collection of plain arrays, not Users models.
$subset = $users->map(function ($user) {
return collect($user->toArray())
->only(['id', 'name', 'email'])
->all();
});

说明

首先,map()方法基本上只是遍历 Collection , 并传递 Collection 中的每个项目到传入的回调。回调的每次调用返回的值构建新的 Collectionmap() 生成方法。

collect($user->toArray())正在 build 一个新的、临时的 CollectionUsers属性。

->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+ 中稍微简化为:

// get your main collection with all the attributes...
$users = Users::get();

// build your second collection with a subset of attributes. this new
// collection will be a collection of plain arrays, not Users models.
$subset = $users->map(function ($user) {
return $user->only(['id', 'name', 'email']);
});

如果将其与 "higher order messaging" for collections 结合使用在 Laravel 5.4 中引入,它可以进一步简化:

// get your main collection with all the attributes...
$users = Users::get();

// build your second collection with a subset of attributes. this new
// collection will be a collection of plain arrays, not Users models.
$subset = $users->map->only(['id', 'name', 'email']);

关于php - 仅从 Laravel 集合中获取特定属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38412091/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com