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);
现在在$model
variables上应用另一个条件
$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); })