Извлечь массив свойств из коллекции 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');