Laravel Eloquent подзапрос и подсчет результатов подзапроса - PullRequest
0 голосов
/ 20 марта 2020

Допустим, есть модель Post. У него есть hasMany отношение, называемое comments(), определенное в его модели.

Я пытаюсь:

  • Получить количество комментариев
  • Это относится на указанный c набор сообщений, определяемый массивом идентификаторов
  • Где комментарии публикуются в определенном диапазоне дат

Я думал, что будет работать следующее:

$ids = [1, 2, 3, 4];

$results = Post::whereIn('id', $ids)
    ->with(['comments'])
    ->whereHas('comments', function($q) {
       $q->whereMonth('created_at', Carbon::now()->month);
    })
    ->withCount('comments')
    ->get();

А затем выполните

$count = array_sum($results->pluck('comments_count')->toArray());

Результат запроса включает в себя comments_count, так что это работает, и $count также работает.

Но дата диапазон в подзапросе не применяется, он насчитывает всех комментариев. Чего мне не хватает?

1 Ответ

0 голосов
/ 20 марта 2020

Вам нужно будет передать то же условие / подзапрос методу withCount:

->withCount(['comments' => function($q) {
       $q->whereMonth('created_at', Carbon::now()->month);
    }])

https://laravel.com/api/5.5/Illuminate/Database/Eloquent/Concerns/QueriesRelationships.html#method_withCount

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...