Laravel 4在哪里与OR或OR?

我怎么说在WHERE (a=1 OR b=1) AND (c=1 OR d=1)

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

使用参数分组 ( Laravel 4.2 )。 对于你的例子,它会是这样的:

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

如果您想在Laravel 4中使用a,b,c,d的参数

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

因为你循环的OR条件,你不需要第二个$ query->从其他职位(实际上我不认为你需要在一般情况下,你可以只使用orWhere在嵌套的地方,如果更容易)

 $attributes = ['first'=>'a','second'=>'b']; $query->where(function ($query) use ($attributes) { foreach ($attributes as $key=>value) { //you can use orWhere the first time, dosn't need to be ->where $query->orWhere($key,$value); } }); 

如果你想在laravel 4中使用圆括号,不要忘记返回
在Laravel 4(至less)中,您需要在示例中使用括号中的$ a,$ b

 $a = 1; $b = 1; $c = 1; $d = 1; Model::where(function ($query) use ($a, $b) { return $query->where('a', '=', $a) ->orWhere('b', '=', $b); })->where(function ($query) use ($c, $d) { return $query->where('c', '=', $c) ->orWhere('d', '=', $d); }); 

这是我的结果: 在这里输入图像说明

您也可以查询第一个或条件,以后可以应用另一个或条件

 $model = Model::where('a',1)->orWhere('b',1); 

现在在$modelvariables上应用另一个条件

 $model1 = $model->where('c',1)->orWhere('d',1)->get(); 

你也可以使用查询范围来使事情变得更加整洁,所以你可以做如下的事情:

 Invoice::where('account', 27)->notPaidAt($date)->get(); 

然后在你的模型中

 public function scopeNotPaidAt($query, $asAt) { $query = $query->where(function ($query) use ($asAt) { $query->where('paid', '=', '0000-00-00')->orWhere('paid', '>=', $asAt); }); return $query; } 

$ a,$ b,$ c,$ d可以是查询的dynamic值

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