我有一个这样的Laravel集合(近似使用数组语法;实际数据是从API响应而不是本地DB获得的object
的Collection
):
$rows = [
[
'id': 1,
'name': 'Sue',
'age': 23,
],
[
'id': 2,
'name': 'Joe',
'age': 25,
],
]
我想提取字段的子集:
$subset = [];
foreach ($rows as $row) {
$subset[] = ['name' => $row['name'], 'age' => $row['age']];
}
这样我最终得到:
$subset = [
[
'name': 'Sue',
'age': 23,
],
[
'name': 'Joe',
'age': 25,
],
]
我应该使用什么Collection
方法来代替for
循环来实现这一点?
我发现了这个建议,使用了一个更高阶的信息,它有一定的意义:
$subset = $rows->map->only(['name', 'age']);
但这只是得到了一个null
值的Collection
。将它扩展为一个常规的map
调用产生了相同的效果。我感觉我需要某种multipluck
,但我不确定它对应于什么!
更新
事实证明,我用高阶map->only
方法做的是正确的。然而,虽然我的集合中的项是Model
的一种,但它们不是 LaravelModel
类的子类或兼容实现,并且缺少only
方法的实现。作者添加了该方法,现在它按预期工作了。
1条答案
按热度按时间idfiyjo81#
你很接近,但是你没有把
map
和only
链接起来,而且only
似乎不能在嵌套的array
s/object
s的集合上工作。因此,对于您的情况,请使用带有回调的
map()
:其输出将为:
注意:如果它们是
array
s而不是object
s,那么你应该使用$row['age']
和$row['name']
,而不是$row->age
和$row->name
。在Laravel中,Model是两者,并且允许任何一种语法。参考文献:
https://laravel.com/docs/9.x/collections#method-map
https://laravel.com/docs/9.x/collections#method-only
编辑:
如果你有一个
Model
s的Collection
,那么你可以在本地做:如果你有一个
Collection
的Collection
的s,那么你可以做:最后,如果您使用
array
或object
,您可以使用collect()
并调用->only()
: