Извлечь массив свойств из коллекции Laravel

Я использую 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
   }
]

Я пытался применить карту и сорвать $categories но он возвращает массив, заполненный нулем.

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'];
}));

pluck метод сделал свое дело. Похоже, что если свойство, которое вы пытаетесь получить, было получено через Eloquent Relationships - Eager Loading, вы должны передать имя отношения pluck,

Я получаю свою коллекцию из БД следующим образом:

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

поэтому я должен был вызвать метод срыва как $categories->pluck('subCategories'); вместо $categories->pluck('sub_categories');

Другие вопросы по тегам