2013-10-21 20 views
5

Sorgunun 25 yaş ve üstü olan tüm kullanıcı kayıtlarını seçmesini istiyorum VE 150-170cm VEYA 190-200cm arasında.laravel çoklu bir döngü içindeki tümcelerin olduğu yerlerde

Bu sorgu aşağıda yazılmıştır. Ancak sorun 25 yaşını doldurmayı ya da 190-200cm uzunluğundaki 150-170 VEYA 25 yaşlarındaki 25 yaşındakilerin yerine 190-200cm insanı tutmaya devam ediyor. Bunu nasıl düzeltebilirim? teşekkürler

$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(); 

Düzenleme: gelişmiş Nerede (http://laravel.com/docs/queries#advanced-wheres) denedim ve kapatılması içine $ heightarray parametresini geçemez olarak bu benim için çalışmaz. laravel belgelerinde

DB::table('users') 
     ->where('name', '=', 'John') 
     ->orWhere(function($query) 
     { 
      $query->where('votes', '>', 100) 
        ->where('title', '<>', 'Admin'); 
     }) 
     ->get(); 
+0

Bunu [avans wheres] (http faydalanmak gerekir: // laravel. com/docs/sorguları # ileri wheres). – Jeemusu

+0

Bunu denedim ama açıları – user1424508

+0

içine geçiremiyorum Denediğin ileri düzey bildirimi gönderebilir misin? – Jeemusu

cevap

8
Jeemusu gibi

ve OP belirtildiği, sen advance wheres kullanmak gerekir. Ama "kullanım" yaklaşımı faydalanmak gerekir kapatma fonksiyonu için bir değişken geçirmek istiyorsanız:

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

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

Bu tamamen denenmemiş, ama advance wheres için belgelere bakarak

, böyle bir şey denemek istiyorum görünüyor:

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

yaptım bunu denedim ama heightarray kapatmaya geçmek gerekiyor, aksi takdirde ne hakkında konuştuğunu bilmiyor – user1424508

1

Yanıt bulundu. $ Heightarray değişkenimi bir defada geçirmek için kapatmaya "use" eklemem gerekiyor. Bir kez $ heightarray daha sonra laravelin ilerlemesi işe yarar.

$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(); 
İlgili konular