Laravel Eloquent查询:如何使用WHERE与OR AND OR?

409

如何表示WHERE (a = 1 OR b = 1) AND (c = 1 OR d = 1)

对于更复杂的查询,我应该使用原生SQL吗?

15个回答

5

您可以使用:

Model::where('table_column', 'value')->orWhere('table_column', 'value')->get()

3
ModelName::where(function ($query) use ($a) {
    $query->where('a', '=', $a)->orWhereNull('a');

})
->where(function ($query) use ($b,$c) {
    $query->where('b', '=', $b)
          ->orWhere('c', '=', $c);
})->where('d',$d);

查询结果:

SELECT * FROM ModelName WHERE (a='a' 或者 a 为空) AND (b='b' 或者 c='c') AND d='d';


2

在Laravel Eloquent中,使用SQL括号的最佳方法是使用回调函数。

注:原始答案翻译为"最初的回答"

YourModal::where(function ($q) {
    $q->where('a', 1)->orWhere('b', 1);
})->where(function ($q) {
    $q->where('c', 1)->orWhere('d', 1);
});

你不必使用=符号,它是默认值。 假设你有一个查询包含括号内的括号。Original Answer: "最初的回答"
WHERE (a = 1 OR (b = 1 and c = 5))


YourModal::where(function ($q) {
    $q->where('a', 1)->orWhere(function($q2){
      $q2->where('b', 1)->where('c', 5);
    });
});

lest say you want to make values dynamics

YourModal::where(function ($q) use($val1, $val2) {
    $q->where('a', $val1)->orWhere(function($q2) use($val2){
      $q2->where('b', $val2)->where('c', $val2);
    });
});

1

这对我来说有效

$business = Model::where('model_id', $model_id1)->orWhere('model_id', $model_id2)->first();

1
对于雄辩的查询构建器,以下查询将无法工作:
MODELNAME::where('a', 1)->orWhere('b', 1)->where('c', 1)->orWhere('d', 1);

But you can use this code:

MODELNAME::where(function($a) {
    $a->where('a', 1)->orWhere('b', 1);
})->where(function($a) {
    $a->where('c', 1)->orWhere('d', 1);
});

你可以使用第二个查询语句,它将完美地工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接