Получается 3 модели Post, Review, Comment.
Нет смысла делать модель Review. Это одинаковая с Comment сущность. Добавляется поле parent_id и "Review" это будет Comment со скоупом whereNull parent_id.
public function scopeParents($query)
{
return $query->whereNull('parent_id');
}
А у комментариев отзыва parent_id == id отзыва. И будет структура, как на Тостере.
Если отзывы и комменты добавляются к разным моделям (посты, товары и тд) то стандартная полиморфная связь.
В модели коммент
public function commentable():
{
return $this->morphTo();
}
В трейте, который нужно добавить ко всем моделям у которых есть комменты
public function comments()
{
return $this->morphMany('App\Models\Comment', 'commentable');
}
Количество комментариев считать как обычно методом withCount. Просто для "отзывов" добавлять скоуп ->parents() к отношениям.