2015-03-13 51 views
3

我有以下查询:Laravel雄辩ORM - 复杂哪里查询

DB::select("SELECT * FROM mod_dns_records WHERE (scheduled = 'N' AND scheduleTime = 0 AND domainId = {$id}) OR (deleteRow = 'Y' AND domainId = {$id})"); 

然而,这不是针对SQL注入安全。有人可以帮助我做到这一点,或者告诉我如何用ORM重建这个。

谢谢!

回答

9

这将是查询,你有它

$result = DB::table('mod_dns_records') 
      ->where('scheduled', 'N') 
      ->where('scheduleTime', 0) 
      ->where('domainId', $id) 
      ->orWhere('deleteRow', 'Y') 
      ->where('domainId', $id) 
      ->get(); 

但是我注意到,因为在这两个群体的domainId条件存在,它可以优化一下:

$result = DB::table('mod_dns_records') 
      ->where('domainId', $id) 
      ->where(function($q){ 
       $q->where('scheduled', 'N'); 
       $q->where('scheduleTime', 0); 
       $q->orWhere('deleteRow', 'Y'); 
      }) 
      ->get(); 
+0

注意,第一例只适用因为OR具有比AND更低的优先级 - 它不会像在原始查询中那样添加任何分组括号。另一方面,第二个示例中的(... callback ...)会添加括号。 – alx 2017-02-23 14:24:50