Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

KalimeroMK's avatar

Help with qery bilder

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

0 likes
2 replies
Sinnbeck's avatar

Has? So between true and true? https://laravel.com/docs/9.x/helpers#method-array-has

$query->whereBetween('transactions.created_at',
                                      [Arr::has($request, 'date_from'), Arr::has($request, 'date_to')]);

Maybe you wanted to do

$query->whereBetween('transactions.created_at',
                                      [$request->input('date_from'), $request->input('date_to')]);  
KalimeroMK's avatar

Need a why to prevent date mix if $request['date_from'], is present run when with $request['date_from'] where and if $request['date_to'] is present run when $request['date_to] where condition but if form and to dates are opresen in reqest run only the last when with whereRow

Please or to participate in this conversation.