问题描述
我正在使用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();