laravel multiple循环中的where子句

use*_*508 6 php mysql laravel laravel-4

我希望查询能够选择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();
Run Code Online (Sandbox Code Playgroud)

编辑:我尝试过高级版(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();
Run Code Online (Sandbox Code Playgroud)

FR6*_*FR6 9

Jeemusu和OP所说的那样,你需要使用先行者.但是如果要将变量传递给闭包函数,则需要使用" 使用 "方法:

$heightarray = array(array(150,170),array(190,200));

DB::table('users')
  ->where('name', '=', 'John')
  ->orWhere(function($query) use ($heightarray){
    //...
  })
  ->get();
Run Code Online (Sandbox Code Playgroud)