Laravel Запрос с суммой значений из дочерней таблицы, если столбец значений в родительской таблице больше суммы значений в дочерней таблице - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь запросить строки из таблицы транзакций, где сумма меньше суммы выделений для этой строки транзакции в таблице распределений. Это работает на полпути. Он предоставляет мне все запросы транзакций с дополнительным полем «selected_amount».

$all_transactions = Transaction::
    withCount([
        'allocations AS amount_allocated' => function ($query) {
            $query->select(
                DB::raw("CAST(SUM(amount) AS INTEGER)"
            ));
        }
    ])
    ->where('contact_type','supplier')
    ->where('contact_id',$ehead->supplier_id)
    ->get()->toArray();

Результат

 0 => array:12 [▼
    "id" => 4
    "amount" => 10000
    "created_by" => 1
    "amount_allocated" => 7500
  ]
  1 => array:12 [▼
    "id" => 5
    "amount" => 10000
    "created_by" => 1
    "amount_allocated" => 10000
  ]

Но я не хочу, чтобы появился второй результат, потому что сумма = выделенная сумма. Как исправить этот запрос?

Пытался использовать:

->where('amount','>','allocated_amount')

, но, возможно, из-за того, что он дополнительно добавлен в поле, выдает ошибку о том, что выделенное поле не существует. Мне он нужен в запросе, а не как отдельное дополнение.

1 Ответ

0 голосов
/ 29 мая 2020

Ну, в этом случае вы можете просто использовать map ()

$all_transactions = collect($all_transactions)->map(function ($row) {
    if ($row['amount'] > $row['amount_allocated']) {
        return $row;
    }
})->filter()->toArray();  // filter() to remove null values
...