如何使用laravel构建动态查询

时间:2016-07-05 13:02:17

标签: php 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 ??,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?'

任何帮助都会很棒,谢谢

1 个答案:

答案 0 :(得分:1)

以这种形式使用查询:

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