withCount вместе с рекурсивным запросом Eloquent - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь получить количество ответов на комментарий к Eloquent с помощью withCount().До сих пор я определил следующие отношения:

QuoteComments

protected $withCount = [
        'replies'
    ];

public function replies(){
    return $this->hasMany(QuotesComments::class, 'reply_id');
}

Использование withCount()

$quoteComments = QuotesComments::where('quote_id', $quoteid)
            ->whereNull('reply_id') // We don't want to show comments that are reply to other comments
            ->orderBy('votes', 'DESC')
            ->withCount('replies');

Схема базы данных:

id   quote_id   reply_id 
1    2          NULL
2    2          1

Я получаю сообщение об ошибке Maximum function nesting level of '512' reached, aborting!, которое, я полагаю, может быть из-за рекурсивных вызовов, которые может делать withCount().Любой свет в конце туннеля был бы великолепен.Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 11 февраля 2019

используйте whereHas в вашем запросе, чтобы не учитывать комментарии, у которых нет ответов.Он вернет только те комментарии, у которых есть хотя бы один повтор.

$quoteComments = QuotesComments::where('quote_id', $quoteid)
         ->whereHas('replies')
        ->whereNull('reply_id') // We don't want to show comments that are reply to other comments
        ->orderBy('votes', 'DESC')
        ->withCount('replies');
0 голосов
/ 15 февраля 2019

Честно говоря, это была такая глупая ошибка с моей стороны.Я проверял документацию от старых версий Laravel и смешивал с новейшими (5.7).

Случилось так, что в моей модели я вставил:

protected $withCount = [
        'replies'
    ];

, хотя на самом деле в этом не было необходимости.Мне просто нужно было вызвать функцию withCount() в контроллере с конечным результатом:

$quoteComments = QuotesComments::where('quote_id', $quoteid)
            ->whereNull('reply_id') // We don't want to show comments that are reply to other comments
            ->orderBy('votes', 'DESC')
            ->withCount('replies');
0 голосов
/ 11 февраля 2019

изменить ->withCount('replies'); на ->with('replies')->count();

РЕДАКТИРОВАТЬ

, если вы хотите считать данные с ненулевым response_id

изменить ->withCount('replies');до

->with(['replies'=>function($query){$query->where('reply_id','!=','NULL')->get();}])->count();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...