Как правильно получить ответы к комментариям?

В Laravel для работы с комментариями у вас может быть несколько вариантов реализации, в зависимости от структуры базы данных и требований к функциональности приложения. В этом ответе я опишу наиболее общий и распространенный подход.

  1. Создайте таблицу в базе данных для хранения комментариев. Минимально необходимыми полями будут идентификатор комментария (id), идентификатор родительского комментария (parentid), идентификатор сущности, к которой относится комментарий (entityid), тип сущности (entitytype), текст комментария (text), идентификатор пользователя, создавшего комментарий (userid) и дата создания (created_at). Вы также можете добавить другие поля, такие как оценки комментариев и т. д., в зависимости от требований.
  1. Создайте модель Comment, которая будет соответствовать таблице комментариев. В модели определите отношение One-to-Many к той модели, к которой комментарий может быть прикреплен (например, к посту, статье или товару). Например, если у вас есть модель Post, вы можете определить следующее отношение в модели Comment:
public function post()
{
    return $this->belongsTo(Post::class, 'entity_id');
}
  1. Добавьте связанные методы в модель Post для получения комментариев. Например:
public function comments()
{
    return $this->hasMany(Comment::class, 'entity_id')->where('entity_type', 'post');
}
  1. Чтобы получить комментарии для определенного поста, вы можете использовать следующий код:
$post = Post::find($postId);
$comments = $post->comments;
  1. Если вы хотите получить ответы на конкретный комментарий, вам нужно будет использовать рекурсивный подход. В модели Comment определите связь родитель-потомок:
public function replies()
{
    return $this->hasMany(Comment::class, 'parent_id');
}
  1. Чтобы получить ответы для определенного комментария, вы можете использовать следующий код:
$comment = Comment::find($commentId);
$replies = $comment->replies;

Это основной подход к получению комментариев и ответов в Laravel. Есть также множество дополнительных возможностей, таких как пагинация комментариев, сортировка по дате или оценке, а также возможность добавления новых комментариев. Все зависит от ваших требований и архитектуры приложения.