Laravel Eloquent Ignore Корпус

Я пытаюсь запустить запрос с помощью Eloquent $ vars ['language'] находится в нижнем регистре, но столбец языка не обязательно в нижнем регистре. Как я могу выполнить этот поиск, используя красноречивый, но все еще имеет нижний регистр в запросе

Item::where('language', $vars['language'])

Что я хочу сделать, так это, хотя я не могу найти нигде, как это сделать

Item::where('LOWER(language)', $vars['language'])

чтобы они были в нижнем регистре, а затем я могу заставить их соответствовать.

Ответ 1

Используйте whereRaw с привязкой параметров для очистки вашего оператора whereRaw:

$term = strtolower($vars['language']);
Item::whereRaw('lower(language) like (?)',["%{$term}%"])->get();

Предыдущий ответ В некоторых базах данных вы можете использовать оператор ilike в вашем where. Например

Item::where('language', 'ilike', $vars['language'])->get();

Все доступные операторы:

protected $operators = array(
    '=', '<', '>', '<=', '>=', '<>', '!=',
    'like', 'not like', 'between', 'ilike',
    '&', '|', '^', '<<', '>>',
);

Изменение: ilike регистра, like.

Ответ 2

По этот пост, db-независимый способ решить эту проблему:

Item::whereRaw('LOWER(language) = ?', [$vars['language']])->get();

Ответ 3

Метод коллекции filter() может быть полезен, если вы пытаетесь найти решение на основе laravel:

// $this refers to an instance of an eloquent User Model
$name = 'BiLbo baGGings';    
return $this->contactInformation->filter(function($value, $key) use($name) { 
   if(strtolower($value->name) == strtolower($name)) {
       return $value;
   }
 });