2016-08-15 5 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}%") 
    } 
}); 

Ошибка:

Undefined переменной: $ букв

Что синтаксис использовать здесь?

+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

Смежные вопросы