#php #laravel #laravel-blade
Вопрос:
В Laravel 8.x я пытаюсь создать систему комментариев в блоге, которая позволяет вам отвечать на комментарии. Если вы отвечаете на комментарий, комментарию присваивается parent_id
значение, соответствующее id
комментарию, на который они отвечают. В настоящее время, когда я зацикливаю комментарии с ответами, он выводит ответ только на 1 цикл глубиной, как в примере ниже:
Текущий пример проблемы:
Пользователь1: Случайное сообщение 1..
> Пользователь2: Этот текст является ответом Пользователю 1 на сообщение 1>
Пользователь6: Случайное сообщение 2..
Пользователь7: Случайное сообщение 3..
Чего я пытаюсь достичь:
Пользователь1: случайный пост 1..
> Пользователь2: этот текст является ответом на пост пользователя user1 на 1
>> Пользователь3: этот текст является ответом на пост пользователя user2 на 1
>>> Пользователь4: этот текст является ответом на Пользователь3 на должность 1
>>> User5: этот текст является ответом на Пользователь3 после 1
User6: случайный пост 2..
User7: случайный пост 3..
Мой текущий код
Модель:
class PostComment extends Model
{
use HasFactory;
public function replies()
{
return $this->hasMany($this, 'parent_id');
}
}
Лезвие:
@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
Теперь, если я добавлю @foreach ($comment->replies as $reply)
4 раза в цикле комментариев, он отобразит ответы.. но, конечно, это непрактично, так как на комментарий может быть неограниченное количество ответов. Надеюсь, вы понимаете, к чему я клоню, я ужасно плохо умею все объяснять.
Любая помощь действительно ценится 🙂
Ответ №1:
создайте два блейд-файла
comment-list.blade.php
child-comment-list.blade.php
В 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
В 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
Итак, в вашем текущем файле
@include('comment-list',['comments'=>$comments]);
Комментарии:
1. Вау… невероятно.. это решило мою проблему! Это сработало идеально, большое вам спасибо!