我尝试使用Eloquent运行一个查询,$vars ['language']是小写的,但语言列不一定是小写的。我怎么能做这个搜索使用雄辩,但仍有小写在查询
Item::where('language', $vars['language'])
我想做的是这个即使我找不到任何地方怎么做
Item::where('LOWER(language)', $vars['language'])
这样它们都是小写的,然后我就可以让它们匹配。
r1wp621o1#
使用whereRaw和parameter binding来清理你的whereRaw语句:
$term = strtolower($vars['language']); Item::whereRaw('lower(language) like (?)',["%{$term}%"])->get();
Prev answer在某些情况下,您可以在where中使用运算符ilike。举个例子
ilike
Item::where('language', 'ilike', $vars['language'])->get();
所有可用的运算符为:
protected $operators = array( '=', '<', '>', '<=', '>=', '<>', '!=', 'like', 'not like', 'between', 'ilike', '&', '|', '^', '<<', '>>', );
编辑:ilike不区分大小写like。
like
zwghvu4y2#
根据this post,解决这个问题的独立于db的方法是:
Item::whereRaw('LOWER(language) = ?', [$vars['language']])->get();
qvk1mo1f3#
filter() collection方法对于寻找基于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; } });
3条答案
按热度按时间r1wp621o1#
使用whereRaw和parameter binding来清理你的whereRaw语句:
Prev answer在某些情况下,您可以在where中使用运算符
ilike
。举个例子所有可用的运算符为:
编辑:
ilike
不区分大小写like
。zwghvu4y2#
根据this post,解决这个问题的独立于db的方法是:
qvk1mo1f3#
filter()
collection方法对于寻找基于laravel的解决方案非常有用: