Загрузка Laravel с условным выбором не работает - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь выбрать сумму значения моего столбца с нетерпением загрузки.

Мой запрос

$transactions = Service::with(['transactions' => function($query) use ($queryData){
        $query->whereIn('status',['Success','Pending','Successful','Processing']);
        $query->whereDate('created_at','>=', $queryData);
        $query->addSelect(DB::raw("SUM(deducted) as adjustment"));
}]);

Но я не получаю никакой суммы с моим ответом.

мой полученный ответ выглядит как

"id": "3",
"name": "Service Name",
"transactions": [ ]

Но это должно быть

"id": "3",
"name": "Service Name",
"adjustment": 30

Ответы [ 2 ]

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

Вы можете использовать функцию sum в коллекции, а не необработанный SQL внутри запроса.Все еще только ударил БД один раз:

Я не знаю, где находится вычтенный, но если на модели (как это выглядит из вышеприведенного запроса), это даст вам сумму запрашиваемых транзакций:

$adjustment= $transactions->sum('deducted');

или если для отношения

$adjustment= $transactions->sum(function ($transaction) {
    return $transaction->transaction?->sum('deducted');
});

Вы также можете получить соответствующее поле с точечной нотацией:

$adjustment= $transactions->sum('transaction.deducted');

Это позволяет вам сохранитьваша коллекция объектов ($transactions, а также поля name и id, как вы отметили, что это необходимо), и все равно получите сумму из исходного запроса.

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

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

$transactions = Service::withCount(['transactions as adjustment' => function($query) use ($queryData){
    $query->whereIn('status',['Success','Pending','Successful','Processing']);
    $query->whereDate('created_at','>=', $queryData);
    $query->select(DB::raw('SUM(deducted)'));
}]);
...