0

I'm using Laravel 5.8 and use ORM to get results from the database. I want to build each parameter request equal sql condition where. I don't know how to call the method with a variable name like $orders=Orders::{$strSQL}; please help me solve this.

if(($request->customer_created_from)&&($request->customer_created_to))
        {  
           $startDate=$request->customer_created_from;
           $finishDate=$request->customer_created_to;
           $strSQL='';
           $strSQL=$strSQL."where('user_id',".Auth::user()->id.")->whereBetween('created_at',[".$startDate.",".$finishDate."])";
          
           if($request->package_status_id){
            //$orders=Orders::where('user_id',Auth::user()->id)->whereBetween('created_at',[$startDate,$finishDate])->wherein('status_id',$request->package_status_id)->get();
             $status_ids='[';
             for($i=0;$i<count($request->package_status_id);$i++){
              $status_ids=$status_ids.$request->package_status_id[$i].",";
             }
             if($status_ids){
              $status_ids=rtrim($status_ids, ",");
              $status_ids=$status_ids.']';
             }

             $strSQL=$strSQL."->wherein("."status_id".",".$status_ids.")->get()";
             $orders=Orders::{$strSQL};
             //$req = $class::{$function_name}();
             return view("admin.customer",compact('orderstatus','startDate','strSQL','finishDate','orders'));
           }
Tirdad Abbasi
  • 707
  • 5
  • 17
Thanh Nguyen
  • 61
  • 1
  • 1
  • 3
  • Does this answer your question? [How to call a function from a string stored in a variable?](https://stackoverflow.com/questions/1005857/how-to-call-a-function-from-a-string-stored-in-a-variable) – levi Aug 13 '20 at 16:12

1 Answers1

0

You can do the query in the question much easier by using the query builder like this:

$query = Order::query();

if ($request->customer_created_from && $request->customer_created_to) {  
    $query->where('user_id',Auth::user()->id)
          ->whereBetween('created_at', [$startDate, $finishDate]);
}

$orders = $query->whereHas($request->package_status_id, function ($query, $ids) {
              return $query->whereIn('status_id', $ids);
          })->get();
Kurt Friars
  • 3,625
  • 2
  • 16
  • 29