我试图使用Eloquent运行查询$ vars ['language']是小写的,但语言列不一定是小写的。如何使用eloquent进行此搜索,但在查询中仍然使用小写
Item::where('language', $vars['language'])
我想做的就是这个,即使我无法在任何地方找到如何做到这一点
Item::where('LOWER(language)', $vars['language'])
这样它们都是小写的然后我可以让它们匹配。
使用whereRaw和parameter binding来清理你的whereRaw语句:
$term = strtolower($vars['language']);
Item::whereRaw('lower(language) like (?)',["%{$term}%"])->get();
上一个答案在一些数据库中你可以在你的位置使用运算符ilike
。例如
Item::where('language', 'ilike', $vars['language'])->get();
所有可用的运营商是:
protected $operators = array(
'=', '<', '>', '<=', '>=', '<>', '!=',
'like', 'not like', 'between', 'ilike',
'&', '|', '^', '<<', '>>',
);
编辑:ilike
是不区分大小写的like
。
根据this post,与数据库无关的解决方法是:
Item::whereRaw('LOWER(language) = ?', [$vars['language']])->get();
如果您正在尝试查找基于laravel的解决方案,则filter()
收集方法非常有用:
// $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;
}
});