0

我正在使用 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 数组,但我找不到访问该属性内数据的方法。根据$categories收藏,我期望用这种格式创建一个新的:

[  
   {  
      "id":1,
      "category_id":1
   },
   {  
      "id":5,
      "category_id":7
   },
   {  
      "id":6,
      "category_id":7
   }
]

我尝试过应用mappluck,但它检索到一个填充有null$categories的数组。

4

2 回答 2

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'];
}));
于 2017-09-19T17:17:57.717 回答
0

pluck方法成功了。看起来如果您尝试获取的属性已通过 Eloquent Relations - Eager Loading 检索到,您必须将关系的名称传递给pluck.

我像这样从数据库中获取我的收藏:

Category::where('team_id', Auth::user()->current_team_id)->with('subCategories')->get()‌​;

所以我不得不调用 pluck 方法$categories->pluck('subCategories');而不是 $categories->pluck('sub_categories');

于 2017-09-19T18:03:03.013 回答