filter(Arr::only($input, ['date_range', 'start_at', 'end_at']), LedgerFilter::class) ->groupBy('store_id'); $stores = Store::filter(Arr::only($input, ['store_id', 'region']), StoreFilter::class) ->leftJoinSub($storeLedgerStats, 'store_ledger_stats', fn ($join) => $join->on('stores.id', '=', 'store_ledger_stats.store_id')) ->when($sorts, function ($query, $sorts) { foreach ($sorts as $sort) { $query->orderBy($sort[0], $sort[1]); } }) ->get(); return $stores->map(function (Store $store, $key) { return [ 'ranking' => $key + 1, 'store' => [ 'id' => $store->id, 'title' => $store->title, ], 'sales' => trim_zeros($store->sales ?: 0), 'expenditure' => trim_zeros($store->expenditure ?: 0), ]; })->all(); } }