Суммарный запрос удваивается при объединении трех таблиц в Laravel - PullRequest
0 голосов
/ 25 июня 2019

Я отправляю данные в chartist.js с помощью контроллера Laravel.Когда я пытаюсь объединить три таблицы для суммирования значений, при присоединении к третьей таблице выходные данные существенно удваиваются.

Следующий запрос получает данные, которые мне нужны, но не суммирует их точно

$chart_stats = Transactions::join('customers', 'customers.id', '=', 'transactions.customer_id')
                        ->join('orders', 'orders.customer_id', '=', 'transactions.customer_id')
                        ->distinct()
                        ->select('customers.region', 'transactions.deposit', 'transactions.purchase_total', 'transactions.finance_amount_paid', 'orders.gov_funding_amount')
                        ->whereIn('customers.region', $selected_regions)
                        ->where('transactions.created_at', '>', $from)
                        ->where('transactions.created_at', '<', $to)
                        ->select(
                            DB::raw('customers.region as region' ),            
                            DB::raw('sum(transactions.deposit) as deposits'),
                            DB::raw('sum(transactions.purchase_total) as sums'),
                            DB::raw('sum(transactions.finance_amount_paid) as finance_paid'),
                            DB::raw('sum(transactions.deposit+transactions.finance_amount_paid) as total_paid'),
                            DB::raw('sum(orders.gov_funding_amount) as funding')
                        )
                        ->groupBy('customers.region')
                        ->orderBy('sums', 'asc')
                        ->get();

Это выведет в массиве следующее:

#original: array:6 [▼
    "region" => "Region 1"
    "deposits" => "5025.40"
    "sums" => "52875.00"
    "finance_amount_paid" => "0.00"
    "total_paid" => "5025.40"
    "funding" => "9228.00"

Должно быть:

    #original: array:6 [▼
    "region" => "Region 1"
    "deposits" => "1706.00"
    "sums" => "21271.00"
    "finance_amount_paid" => "0.00"
    "total_paid" => "1706.40"
    "funding" => "3396.00"

1 Ответ

1 голос
/ 25 июня 2019

Я собирался дать это как комментарий, но это было бы лучше в качестве ответа.Это предложение, и я могу ошибаться.Есть 2 возможных ответа.

Измените эти строки:

->where('transactions.created_at', '>', $from)
->where('transactions.created_at', '<', $to)

На:

->whereBetween('transaction.created_at, $from, $to)

Или edit: type, массивы в массивы, исправлено :

->where([['transactions.created_at', '>', $from], ['transactions.created_at', '<', $to]])

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

->where(function ($query) {
      $query->where('transactions.created_at', '>', $from)
            ->where('transactions.created_at', '<', $to)
            ->distinct();
       })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...