我希望查询能够选择25岁以上且150-170cm或190-200cm之间的所有用户记录。
我在下面写了这个查询。然而问题是它不断得到25岁的人或190-200厘米的人而不是25岁的150-170岁或25岁的人,身高190-200厘米。我怎样才能解决这个问题?感谢
$heightarray=array(array(150,170),array(190,200));
$user->where('age',25);
for($i=0;$i<count($heightarray);i++){
if($i==0){
$user->whereBetween('height',$heightarray[$i])
}else{
$user->orWhereBetween('height',$heightarray[$i])
}
}
$user->get();
编辑:我尝试过高级版(http://laravel.com/docs/queries#advanced-wheres)但它对我不起作用,因为我无法将$ heightarray参数传递给闭包。
来自laravel文档的
DB::table('users')
->where('name', '=', 'John')
->orWhere(function($query)
{
$query->where('votes', '>', 100)
->where('title', '<>', 'Admin');
})
->get();
答案 0 :(得分:9)
如Jeemusu和OP所述,您需要使用advance wheres。 但是如果你想将变量传递给闭包函数,你需要使用“使用”方法:
$heightarray = array(array(150,170),array(190,200));
DB::table('users')
->where('name', '=', 'John')
->orWhere(function($query) use ($heightarray){
//...
})
->get();
答案 1 :(得分:2)
我找到了答案。我需要在闭包中包含“use”以传递我的$ heightarray变量。一旦$ heightarray进入,那么laravel的推进工作。
$heightarray=array(array(150,170),array(190,200));
$user->where('age',25);
$userprofile->Where(function($query) use ($heightarray) {
for($i=0;$i<count($heightarray);i++){
if($i==0){
$user->whereBetween('height',$heightarray[$i])
}else{
$user->orWhereBetween('height',$heightarray[$i])
}
}
});
$user->get();
答案 2 :(得分:0)
这是完全未经测试的,但查看advance wheres的文档,您似乎想尝试这样的事情:
DB::table('users')
->where('age',25)
->Where(function($query)
{
for($i=0;$i<count($heightarray);i++){
if($i==0){
$query->whereBetween('height', $heightarray[$i]);
}else{
$query->orWhereBetween('height', $heightarray[$i]);
}
}
})->get();