Как удалять в рекурсии объекты из коллекции?

У меня есть колелкция комментов, в которой одни комменты могут являться ответами на другие, и потому должны быть выведены внутри контейнера коммента, на который отвечают. При этом у них также могут быть ответы - типичная рекурсия.
Проблема - я вывожу комменты с условием в контейнер, но из-за внешнего цикла они появляются потом и во внешнем контейнере, как самостоятельные. Очевидно, надо их удалять при выводе. Но я уже чаc бьюсь и не могу понять, почему они не удаляются из коллекции и продолжают появляться во внешнем цикле. Уже и клонировал коллекцию, и по ссылке передавал - бестолку.

comments.blade.php
<div class="comments__items">
    <?php $comments = clone $entry->comments; // Тут обычная коллекция Laravel/ Eloquent ?>

    @forelse($comments as $key => $comment)
        @include('common.comment')
    @empty
        @if($entry->enable_comments === true)
            <div class="comments__null">Пока нет ни одного комментария</div>
        @endif
    @endforelse
</div>


comment.blade.php
<div class="comments__thread-container">
    <div class="comment">
          Тут выводится сам коммент
    </div>

    <?php $prev_comm_id = $comment->id ?>
    @foreach($comments as $key => $comment)
        @if($comment->reply_to == $prev_comm_id  {{--Если является ответом на текущий коммент) --}}
            <?php $comments->forget($key); // Удалить из коллекции ?>
            @include('common.comment') <!-- И вывести (с собственными ответами) -->
        @endif
    @endforeach
</div>
  • Вопрос задан
  • 171 просмотр
Пригласить эксперта
Ответы на вопрос 1
miraage
@miraage
Старый прогер
Данные на вход во вьюху уже должны быть в виду дерева построены.
И вдогонку почитайте/посмотрите.

https://github.com/lazychaser/laravel-nestedset
https://stackoverflow.com/questions/28765834/neste...
https://stackoverflow.com/questions/30872114/neste...
https://www.reddit.com/r/laravel/comments/32x6k4/g...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы