2017-07-26 57 views
1

我使用以下方式爲基本查詢構建查詢。Laravel查詢((Key1 = A和Key2 = B)或(Key1 = B和Key2 = A))和Key3 = C

// e.g. $params = ['id' => 'a', 'name' = 'ken'] 
foreach ($params as $key => $val) { 
    $query->where($key, "=", $val); 
} 

但是,我無法找到以下複雜查詢的方法。我怎樣才能建立一個查詢?

((Key1=A and Key2=B) or (Key1=B and Key2=A)) and Key3=C 

我找到了辦法,如果查詢是(A or B) and (C or D)

$query->where(function($query) use($value1, $value2){ 
    $query->where('column1', '=', $value1)->orWhere('column2', '=', $value2) 
}); 
$query->where(function($query) use($value3, $value4){ 
    $query->where('column1', '=', $value3)->orWhere('column2', '=', $value4) 
}); 

回答

1

使用where() and orWhere() closures這樣,如果你需要((x and y) or (z and v)) and z

Model::where(function ($q) use ($a, $b) { 
     $q->where(function($q) use($a, $b){ 
      $q->where('key1', $a)->where('key2', $b); 
     }) 
     ->orWhere(function($q) use($a, $b){ 
      $q->where('key1', $b)->where('key2', $a); 
     }) 
    }) 
    ->where('key3', $c) 
    ->get(); 
+0

謝謝!我正在嘗試它。 – zono

+0

對於遲到的回覆,我很抱歉。不知何故,我得到語法錯誤。我很難解決它。 – zono

+1

它工作。非常感謝! – zono

相關問題