2015-03-13 91 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