Я создал приложение для отслеживания продаж. В моем представлении клиентов я хочу столбец с общим объемом продаж на одного клиента, но по мере роста клиентской базы список загружается все медленнее и медленнее. Вот что я сделал (упрощенно):
Контроллер:
$customers = App\Customer::get();
Вид:
@foreach ($customers as $customer)
{{ $customer->name }} {{ $customer->totalSales() }}
@endforeach
Модель:
public function totalSales()
{
$invoiceLines = InvoiceLine::whereHas('invoice', function ($query) {
$query->where('customer_id', $this->id);
})->get();
$sales = $invoiceLines->reduce(function ($carry, $invoiceLine) {
return $carry + ($invoiceLine->quantity * $invoiceLine->pricePerUnit);
});
return $sales ?: 0;
}
Как лучше всего сделать этот просмотр / отчет более «масштабируемым»?
Я думал о создании команды, которая рассчитывает общий объем продаж на одного клиента за одну ночь и помещает результат в таблицу клиентов, но это означает, что цифры не будут точными в течение дня ...