Laravel withCount () подзапрос - PullRequest
       22

Laravel withCount () подзапрос

0 голосов
/ 23 октября 2018

Как запустить подзапрос в withCount ()?

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

Вот пример чего-точто я ищу:

$date_from = Carbon::parse('1/1/2018');
$date_to = Carbon::parse('1/2/2018');

$models = Model::query()
    ->withCount('relation1', function (Builder $query) use ($date_from, $date_to) {
        $query->whereBetween('relation1.date1', [$date_from, $date_to])
              ->where('value1', true);
    })
    ->withCount('relation2', function (Builder $query) use ($date_from, $date_to) {
        $query->whereBetween('relation2.date2', [$date_from, $date_to])
              ->where('value2', false);
    })
    ->withCount('relation3', function (Builder $query) use ($date_from, $date_to) {
        $query->whereBetween('relation3.date3', [$date_from, $date_to]);
    });

Как мне это сделать, чтобы он правильно брал подсчет модели на основе подзапроса на отношение?

1 Ответ

0 голосов
/ 23 октября 2018

Я думаю, вам нужно передать подзапросы в виде значений ассоциативного массива:

https://laravel.com/docs/5.7/eloquent-relationships#counting-related-models

Например,

$date_from = Carbon::parse('1/1/2018');
$date_to = Carbon::parse('1/2/2018');

$models = Model::withCount([
        'relation1' => function (Builder $query) use ($date_from, $date_to) {
            $query->whereBetween('relation1.date1', [$date_from, $date_to])
                  ->where('value1', true);
        }, 
        'relation2' => function (Builder $query) use ($date_from, $date_to) {
            $query->whereBetween('relation2.date2', [$date_from, $date_to])
                  ->where('value2', false);
        },
        'relation3' => function (Builder $query) use ($date_from, $date_to) {
            $query->whereBetween('relation3.date3', [$date_from, $date_to]);
        }
    ])->get();
...