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;
}
});