Laravel Eloquent忽略套管

Lpc*_*ark 14 mysql orm lowercase laravel eloquent

我试图使用Eloquent运行查询$ vars ['language']是小写的,但语言列不一定是小写的.如何使用eloquent进行此搜索,但在查询中仍然使用小写

Item::where('language', $vars['language'])
Run Code Online (Sandbox Code Playgroud)

我想做的就是这个,即使我无法在任何地方找到如何做到这一点

Item::where('LOWER(language)', $vars['language'])
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ala 36

更新:如果您的MySql版本不支持ilike,则使用带参数绑定的whereRaw来清理您的whereRaw语句:

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

与未经过版本化的版本:

Item::where('language', 'ilike', $vars['language'])->get();
Run Code Online (Sandbox Code Playgroud)

上一个答案

尝试ilike在您的位置使用运算符.例如

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

所有可用的运营商是:

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

编辑:ilike不区分大小写like.

  • ilike是postgres不区分大小写的 (9认同)

igo*_*s07 13

根据这篇文章,解决这个问题的独立于数据库的方法是:

Item::whereRaw('LOWER(language) = ?', [$vars['language']])->get();
Run Code Online (Sandbox Code Playgroud)