Как сделать SUM () с отношением WHERE in HASMANY на laravel? Любая помощь приветствуется - PullRequest
0 голосов
/ 04 августа 2020

Добрый вечер, друзья, мне трудно получить SUM от HASMANY отношения с условием.

Я пытался сделать что-то вроде этого:

$marketPlaces = ModelAccountMarketplace::with(['orders'])
->whereHas('orders', function ($query) use ($dates) {
    $query->selectRaw('SUM(valor_frete) as somaFreteGratis')
          ->whereBetween('datetime', [$dates['dateStart'], $dates['dateEnd']]);
});

Но когда я пытаюсь получить значение с помощью: var_dump($marketPlace->somaFreteGratis);

, я получаю значение null. Я пытаюсь поместить where внутри WITH(), например:

$marketPlaces = ModelAccountMarketplace::with(['orders' => function ($query) {
    $query->selectRaw('SUM(valor_frete) as somaFreteGratis')->where('tipo_frete', 'gratis');
}])
->whereHas('orders', function ($query) use ($dates) {
    $query->whereBetween('datetime', [$dates['dateStart'], $dates['dateEnd']]);
});

Но при каждой попытке я получаю нулевое значение, когда проверяю:

<?= var_dump($marketPlace->somaFreteGratis); ?>

Любая помощь будет оценена .

1 Ответ

1 голос
/ 04 августа 2020

То, что вы пытаетесь сделать, может быть выполнено с помощью withCount вместе с Closure

$marketPlaces = ModelAccountMarketplace::withCount([
    'orders as somaFreteGratis' => function ($query) use ($dates) {
        $query->select(DB::raw('sum(valor_frete)')
        ->where('tipo_frete', 'gratis')
        ->whereBetween('datetime', [$dates['dateStart'], $dates['dateEnd']]);
    }
])
->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...