我正在使用Laravel 5.3,我有一个格式如下的集合:
$categories = [
{
"id":1,
"sub_categories":[
{
"id":1,
"category_id":1
}
]
},
{
"id":7,
"sub_categories":[
{
"id":5,
"category_id":7,
},
{
"id":6,
"category_id":7
}
]
}
]
我需要提取所有sub_categories数组,但我找不到访问该属性内部数据的方法。根据{{1}}集合,我希望使用以下格式创建一个新的:
$categories
我尝试将地图和采摘应用于[
{
"id":1,
"category_id":1
},
{
"id":5,
"category_id":7
},
{
"id":6,
"category_id":7
}
]
,但它会检索一个填充 null 的数组。
答案 0 :(得分:2)
看起来flatMap
会完全符合您的要求。我不确定为什么它会将项目作为数组返回给回调但是这对我有用...
$categories = collect((object) [
[
'id' => 1,
'sub_categories' => [
[
'id' => 1,
'category_id' => 1
]
]
],
[
'id' => 7,
'sub_categories' => [
[
'id' => 5,
'category_id' => 6
],
[
'id' => 6,
'category_id' => 7
]
]
],
]);
dd($categories->flatMap(function($category) {
return $category['sub_categories'];
}));
答案 1 :(得分:0)
pluck
方法就行了。看起来如果您尝试获取的属性已通过Eloquent Relationships - Eager Loading检索到,您必须将关系的名称传递给pluck
。
我从DB那里得到我的收藏:
Category::where('team_id', Auth::user()->current_team_id)->with('subCategories')->get();
所以我必须将pluck方法称为$categories->pluck('subCategories');
而不是$categories->pluck('sub_categories');