2016-07-30 4 views
0

У меня есть коллекции внутри коллекции, которые выглядят так:Работа на Laravel вложенными коллекции

=> [ 
[ 
"id" => 3, 
    "parent_id" => 2, 
    "depth" => 1, 
    "children" => [ 
    [ 
     "id" => 4, 
     "parent_id" => 3, 
     "depth" => 2, 
     "children" => [ 
     [ 
      "id" => 5, 
      "parent_id" => 4, 
      "depth" => 3, 
      "children" => [ 
      [ 
    [...] 

Как я могу работать над этим? $ Result-> счетчик();

это возвращение 1

Он ведет себя, как есть только одна коллекция, так что я не могу даже использовать карту или каждый фильтровать. Мне нужно фильтровать с максимальной глубиной 4.

Я попробовал reject(), но он не работает ни с одним.

Я мог бы преобразовать его в массив, но я хочу, чтобы использовать хорошие методы сбора ...

ответ

1

вам нужно перебирать ваши пункты сбора

$result->children->map(function ($item) { 
    // do some stuff with $item or you can no map through its children 
    $item->children->map(function ($nestedItem) { 
     // do some stuff with $nestedItem etc// 
    }); 
}); 

альтернативой было бы использовать foreach заявление, хотя

+0

Это возвращает меня: Null – TheShun

+0

разместите здесь свой код, а не только дамп переменной –

+0

Я использую этот https://github.com/franzose/ClosureTable в моей модели User. Чтобы получить этот дамп, я просто сделаю: $ result = $ user-> getDescendantsTree(); Здесь я не могу опубликовать весь класс таблицы замыкания, но результатом является вложенная коллекция. – TheShun

0

Сначала преобразовать коллекцию в массив, а затем использовать

count($result, COUNT_RECURSIVE) 
Смежные вопросы