如何通过变量名访问laravel ORM 5.8的方法

问题描述

我正在使用Laravel 5.8,并使用ORM从数据库中获取结果。 我想在其中建立每个参数请求相等的sql条件。 我不知道如何使用像$ orders = Orders :: {$ strSQL};这样的变量名来调用该方法。 请帮我解决这个问题。

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'));
           }

解决方法

通过使用如下查询构建器,您可以更轻松地在问题中进行查询:

$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();

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...