En Laravel 8.x, estoy tratando de crear un sistema de comentarios de blog que le permita responder a los comentarios. Si responde a un comentario, al comentario se le asigna un parent_id
, que es el id
del comentario al que está respondiendo. Actualmente, cuando hago un bucle de los comentarios con las respuestas, solo generará un bucle de respuesta de 1 profundidad como el siguiente ejemplo:
class PostComment extends Model { use HasFactory; public function replies() { return $this->hasMany($this, 'parent_id'); } }
Espada:
@foreach ($comments as $comment) <p> {{ $comment->user->name }} : {{ $comment->comment }} </p> @foreach ($comment->replies as $reply) <p> {{ $reply->user->name }} : {{ $reply->comment }} </p> @endforeach @endforeach
Ahora, si agrego @foreach ($comment->replies as $reply)
4 veces dentro del ciclo de comentarios, mostrará las respuestas... pero, por supuesto, esto no es práctico ya que puede haber respuestas ilimitadas a un comentario. Espero que puedas entender a lo que estoy tratando de llegar, soy terriblemente malo para explicar las cosas.
Cualquier ayuda es muy apreciada :)
crear dos archivos blade
comment-list.blade.php
child-comment-list.blade.php
En el archivo comment-list.blade.php
@if(count((array)$comments)) @foreach ($comments as $comment) <p> {{ $comment->user->name }} : {{ $comment->comment }} </p> @include('child-comment-list',['comments'=>$comment->replies]) @endforeach @endif
En el archivo child-comment-list.blade.php
@if(count((array)$comments)) @foreach($comments as $comment) <p> {{ $comment->user->name }} : {{ $comment->comment }} </p> @if(count((array)$comment->replies)) @include('child-comment-list',['comments'=>$comment->replies]) @endif @endforeach
Así que en su archivo actual
@include('comment-list',['comments'=>$comments]);