Задать вопрос
@Yadalay
Php, Mysql, Html, Css, Js/Jquery/Ajax, Laravel

Как грамотно составить запрос с withTrashed?

Всем привет!
Такая задача у меня:
- Есть комментарии к каждой новости.
- Есть ответы к этим комментариям, которые выводится в виде лестнички.
- Есть мягкое удаление комментариев.
Нужно составить запрос, чтобы выводить ещё и удалённые комментарии только в том случае, если у них есть ответы уже. Если ответов нет, то выводить не надо.
Вначале пробовал так:
$comments = $article->comments()->where(function ($query) {
    $query->where('comment_id', 0);
    $query->orWhereNull('comment_id');
})->where(function ($query) {
    $query->whereHas('comments', function ($query) {
        $query->withTrashed();
    });

    $query->orWhereDoesntHave('comments');
})->orderBy('id', 'desc')->paginate($this->paginate);

Не сработало. Потом попробовал так:
$comments = $article->comments()->withTrashed()->where(function ($query) {
    $query->where('comment_id', 0);
    $query->orWhereNull('comment_id');
})->where(function ($query) {
    $query->whereHas('comments');

    $query->orWhereDoesntHave('comments', function ($query) {
        $query->whereNull('deleted_at');
    });
})->orderBy('id', 'desc')->paginate($this->paginate);

Тоже не сработало. Пока нет идей. Прошу знающих помочь мне с этим запросом.
  • Вопрос задан
  • 105 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@NubasLol
->where(function ($query) {
    $query->where('deleted_at',  '!=',  null)->has('comments');
});
->orWhere('deleted_at',  '=',  null)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ShelestovAnt
@ShelestovAnt
Верстаю и программирую
Я делал такое с использованием индексов _lft _rgt
Сначала получал просто родительские комментарии, потом получал все комментарии между родительскими индексами включительно, с условием whereHas('comments') у которых есть дочерние не удаленные.
А в js уже переводил в дерево, ну или можно там же в php
Ответ написан
Ваш ответ на вопрос

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

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