Laravel查询((Key1 = A和Key2 = B)或(Key1 = B和Key2 = A))和Key3 = C

时间:2017-07-26 10:15:16

标签: laravel eloquent

我使用以下方式构建查询以进行基本查询。

// 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 个答案:

答案 0 :(得分:1)

如果您需要((x and y) or (z and v)) and z

,请使用where() and orWhere() closures
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();
相关问题