mysql Laravel Eloquent忽略大小写

64jmpszr  于 2023-05-05  发布在  Mysql
关注(0)|答案(3)|浏览(139)

我尝试使用Eloquent运行一个查询,$vars ['language']是小写的,但语言列不一定是小写的。我怎么能做这个搜索使用雄辩,但仍有小写在查询

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

我想做的是这个即使我找不到任何地方怎么做

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

这样它们都是小写的,然后我就可以让它们匹配。

r1wp621o

r1wp621o1#

使用whereRaw和parameter binding来清理你的whereRaw语句:

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

Prev answer在某些情况下,您可以在where中使用运算符ilike。举个例子

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

所有可用的运算符为:

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

编辑:ilike不区分大小写like

zwghvu4y

zwghvu4y2#

根据this post,解决这个问题的独立于db的方法是:

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

qvk1mo1f3#

filter() collection方法对于寻找基于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;
   }
 });

相关问题