2013-10-21 3 views
5

거의 25 세의 사용자 레코드를 모두 선택하고 150-170cm 또는 190-200cm 사이의 검색어를 원합니다.laravel multiple 루프 내의 절

아래에이 쿼리가 적혀 있습니다. 그러나 문제는 25 세 또는 25 세에서 190-200cm, 190-100cm의 150-170 세 또는 25 세의 사람들을 계속 유지하는 것입니다. 이 문제를 어떻게 해결할 수 있습니까? 감사

$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

당신은 [미리 알의] (HTTP 사용해야 : // laravel합니다. co.kr/docs/queries # advanced-wheres). – Jeemusu

+0

나는 그것을 시도했지만 클로저에 변수를 전달할 수 없다. – user1424508

+0

시도한 고급 where 문을 게시 할 수 있습니까? – Jeemusu

답변

8
Jeemusu처럼

과 영업 이익은 말했다, 당신은 advance wheres를 사용해야합니다. 그러나 당신은 당신이 "사용"접근 방식을 이용해야 클로저 함수에 변수를 전달하려면 :

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

DB::table('users') 
    ->where('name', '=', 'John') 
    ->orWhere(function($query) use ($heightarray){ 
    //... 
    }) 
    ->get(); 
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(); 
+0

나는 그것을 시도했다. 그러나 당신은 closure에 heightarray를 통과해야한다 그렇지 않으면 당신이 무엇에 대해 말하고 있는지에 관해 모른다. – user1424508

1

나는 답을 발견했다. 내 $ heightarray 변수를 전달하기 위해 클로저에 "use"를 포함시켜야합니다. 일단 $ 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();