2016-08-15 89 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並且您需要一個OR。無論如何,他給了你一個很好的暗示來解決部分問題。 – 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