Need to build one query for 5 different scenarios and this my code
public function sum(array $request)
{
return Transaction::query()->whereStatus('succeeded')
->join('vehicle_rentals', 'transactions.vehicle_rental_id', '=', 'vehicle_rentals.id')
->when((int)Arr::get($request, 'fleet_id'), function ($query) use ($request) {
$query->where('vehicle_rentals.pickup_location_id', $request['fleet_id'])
->orWhere('vehicle_rentals.drop_location_id', $request['fleet_id']);
})
->when((int)Arr::get($request, 'vehicle_id'), function ($query) use ($request) {
$query->where('vehicle_rentals.vehicle_id', $request['vehicle_id']);
})
->when(Arr::has($request, 'date_from'),
function ($query) use ($request) {
$query->where('transactions.created_at', '>=', $request['date_from']);
})
->when(Arr::has($request, 'date_to'),
function ($query) use ($request) {
$query->where('transactions.created_at', '<=', $request['date_to']);
})
->when(Arr::has($request, 'date_from') and Arr::has($request, 'date_to'),
function ($query) use ($request) {
$query->whereRaw(
"(transactions.created_at >= ? AND transactions.created_at <= ?)",
[
$request['date_from'],
$request['date_to'],
]
);
});
but the part with dates is not working ok :) need to update the query according to the parameters form request it date_from is present not null to update query with $query->whereDate('transactions.created_at', Arr::has($request, 'date_to')); and if date_to is present and date_form is not or if bouth dtes are present to run whereBetween of no date is present in reqest to show all records