如何使用 laravel 构建动态查询


How to build dynamic queries with laravel

所以我有一个问题。使用 laravel,您可以使用 Eloquent 库来创建动态查询,但这是我的问题。我有一个外部数据库,其中包含我需要调用的存储过程。我发现这段代码有效。

$results = DB::connection('sqlsrv')->select($query);

但是我需要知道是否有办法动态构建查询,因为并非我的表单中的所有数据都必须填充,否则我的存储过程需要一些值或"NULL"。

这是我到目前为止所拥有的,它有效,但它不是动态的,我必须做很多垃圾才能做到这一点

 $query = 'exec PROCEDURE_HERE "'.$request->name.'","'.$request->flastname.'","'.$request->mlastname.'",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,0,null,"'.$request->datepicker.'",0,null';

我有这个函数来处理空值,但问题是因为查询有"(那些东西)来构建查询,我的最终查询看起来像这样

public function adaptRequest(Request $request){
        if (!isset($request->name)){
            $request->name = "null";
        }
        if (!isset($request->flastname)){
            $request->flastname = "null";
        }
        if (!isset($request->mlastname)){
            $request->mlastname = "null";
        }
        if ($request->datepicker == ""){
            $request->datepicker = "null";
        }
        return $request;
    }
exec PROCEDURE "null","null","null",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,0,null,"null",0,null

我需要知道的是,是否有办法像java对Prepared语句所做的那样解决这个问题,在变量中我放置了一个"?",然后单独填充数据,有点像这样,然后填充"?"。

$query = 'exec PROCEDURE_HERE ??,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?'

任何帮助都会很棒,谢谢

以以下形式使用查询:

$query = User::select(...)->join(..);
if(condition){
    $query->where(...);
}
if(condition){
    $query->where(...);
}
$query->get(...);