我一直在审查Laravel Collections的文档和API,但似乎找不到我要找的东西:
我想从集合中检索包含模型数据的数组,但只获取指定的属性.
也就是说Users::toArray('id','name','email'),集合实际上拥有用户的所有属性,因为它们在别处使用,但在这个特定的地方我需要一个带有userdata的数组,并且只需要指定的属性.
在Laravel中似乎没有帮助吗? - 我怎样才能以最简单的方式做到这一点?
pat*_*cus 125
您可以使用现有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();
});
Run Code Online (Sandbox Code Playgroud)
说明
首先,该map()方法基本上只是迭代遍历Collection,并将每个项目Collection传递给传入的回调.从每次回调调用返回的值构建Collection该map()方法生成的新值.
collect($user->toArray())只是建立一个新的,临时Collection的Users属性.
->only(['id', 'name', 'email'])将临时Collection减少到仅指定的那些属性.
->all()将临时数Collection转回普通数组.
把它们放在一起就可以得到"对于users集合中的每个用户,返回一个只包含id,name和email属性的数组."
Laravel 5.5 only在Model上添加了一个方法,它基本上和它一样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']);
});
Run Code Online (Sandbox Code Playgroud)
Ruf*_*les 15
use User::get(['id', 'name', 'email']),它将返回一个带有指定列的集合,如果你想使它成为一个数组,只需toArray()在get()方法之后使用,如下所示:
User::get(['id', 'name', 'email'])->toArray()
大多数情况下,您不需要将集合转换为数组,因为集合实际上是类固醇上的数组,并且您可以使用易于使用的方法来操作集合.
下面的方法也有效。
$users = User::all()->map(function ($user) {
return collect($user)->only(['id', 'name', 'email']);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
81293 次 |
| 最近记录: |