2016-08-15 15 views
3

Laravelに配列を持っています。Laravel Eloquent:アドバンストクエリにパラメータを動的に追加する

$letters = array("E", "T", "R"); 

私は今、それはこのように終わるように、高度なクエリにこれらを追加したい:

Table::where('status', 1)->where(function ($q) { 
    $q->where('city', 'like', "E%") 
    ->orWhere('city', 'like', "T%") 
    ->orWhere('city', 'like', "R%"); 
}); 

しかし、私はどのように私は手紙をループすることができますことを確認していません。これらのようなものは失敗:

Table::where('status', 1)->where(function ($q) { 
    foreach ($letters as $letter) { 
     $q->where('city', 'like', "{$letter}%") 
    } 
}); 

エラーは次のとおりです。

未定義の変数:$文字ここで使用するためにどのような構文

?これは動作しますが、これをしようとする場合、私は知らない

+0

tiはどのように失敗しますか? – whoan

+0

未定義の変数:$ letters – user

+0

だから、@ aldrinの答えを見てください。しかし、それはANDを適用することに注意してください。とにかく、彼はあなたに問題の一部を解決するための良いヒントを与えました。 – whoan

答えて

4

Table::where('status', 1)->where(function ($q) use ($letters){ //<== NOTICE `use` 
    foreach ($letters as $key=>$letter) { 
    if($key == 0){ // IF 1ST ELEMENT, WE DO A $q->where(); 
     $q->where('city', 'like', "{$letter}%"); //<== STILL NEED THE ; 
    }else{   // OTHERWISE WE DO AN $q->orWhere(); 
     $q->orWhere('city', 'like', "{$letter}%"); //<== STILL NEED THE ; 
    } 
    } 
}); 

useキーワードがあなたの外の変数を取得します。

+0

完璧な思考! – Poiz

関連する問題