To use a variable inside a closure, you need to use use()
to send its value to that function.
For the use of withSum({relation},{column})
you need ro make a separate call for each.
Buyer::withCount([
'orders' => function ($query) use ($dateTo) {
$query->where('created_at', '>=', $dateTo);
}
])
->withSum([
'orders' => function ($query) use ($dateTo) {
$query->where('created_at', '>=', $dateTo);
}
], 'price')
->withSum([
'orders' => function ($query) use ($dateTo) {
$query->where('created_at', '>=', $dateTo);
}
], 'charge')
->get();
withSum()
is only available in Laravel version 8 or higher.
Edit for arrows function syntax
Buyer::withCount([
'orders' => fn ($query) $query->where('created_at', '>=', $dateTo),
])
->withSum(['orders' => fn ($query) $query->where('created_at', '>=', $dateTo)], 'price')
->withSum(['orders' => fn ($query) $query->where('created_at', '>=', $dateTo)], 'charge')
->get();