Laravel Eloquent忽略套管

问题描述 投票:12回答:3

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

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

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

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

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

mysql orm laravel eloquent lowercase
3个回答
32
投票

使用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


12
投票

根据this post,与数据库无关的解决方法是:

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

-1
投票

如果您正在尝试查找基于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;
   }
 });
© www.soinside.com 2019 - 2024. All rights reserved.