如何在雄辩的模型中搜索不区分大小写

时间:2018-07-24 11:52:03

标签: laravel eloquent

我不会在雄辩的模型中搜索不区分大小写的内容。 现在,我已经习惯了

Model::where($column, 'LIKE', '%' . $value . '%' ); 

但这是区分大小写的。我该如何解决呢?
我也找到了这篇帖子How can I search (case-insensitive) in a column using LIKE wildcard?,但是我不能在雄辩的模型中使用它

8 个答案:

答案 0 :(得分:6)

没有看到这个解决方案。所以我把这个贴在这里。

DB::table('products')
   ->select('productid')                
   ->where(DB::raw('lower(product)'), 'like', '%' . strtolower($searchword) . '%')
   ->get();

答案 1 :(得分:5)

实际上,您不需要使用UPPER,只需使用ilike作为比较器,它将进行区分大小写的比较。

Model::where('column', 'ilike', '%' . $value . '%')

要做需要使用%符号来表示您要搜索的子字符串。

答案 2 :(得分:2)

Laravel雄辩的搜索不区分大小写,查询中不需要ilike,上,下函数。

只需使用:

Controller::query()
    ->where('column1_name', 'LIKE', "%{$search}%") 
    ->orWhere('column2_name', 'LIKE', "%{$search}%") 
    ->orWhere('column3_name', 'LIKE', "%{$search}%") 
    ->get();

如果您有多个要查询的表字段,则orWhere部分为

答案 3 :(得分:1)

您对表格的排序规则是什么?

这是数据库中排序规则的特殊性,请尝试使用 latin_general_ci latin_gerneral_cs ,因为它们是不区分大小写的。

但是,如果您尝试通过示例在 utf8_bin 中获得此权限,则由于该排序规则很敏感,因此它将无法运行。

所有示例都在MySql下运行。

答案 4 :(得分:1)

在这种情况下,我建议使用上层功能

Model::whereRaw("UPPER('.$column.') LIKE '%'". strtoupper($value)."'%'"); 

像这样

答案 5 :(得分:1)

这应该有效。

替换<div class="item" id="su1" onclick="change_id()"></div> <div class="item" id="su2" onclick="change_id()"></div> <div class="item" id="su3" onclick="change_id()"></div> <div class="number" id='num1' onclick="put_value()">1</div> <div class="number" id='num2' onclick="put_value()">2</div> <div class="number" id='num3' onclick="put_value()">3</div>column

$text

答案 6 :(得分:1)

您不必将关键字和 DB 值都转换为相同的大小写(UPPER 或 LOWER)。相反,您可以简单地指定“iLIKE”而不是“LIKE”。以下示例返回基于 category_id 的模型数据列表,重要的是关键字是否匹配名字或姓氏:

$transactions = Transaction::where('category_id', $category_id);
$transactions = $transactions->where(function ($q) use($keyword) {               
    $q->where('firstName', 'iLIKE', '%'.$keyword.'%');
    $q->orwhere('lastName', 'LIKE', '%'.$keyword.'%');
});

答案 7 :(得分:0)

已使用iLike运算符回答了此问题,不区分大小写,请参见

Laravel Eloquent Ignore Casing

或者出于娱乐目的,不建议这样做。

// prepare two variants of the same value ?
// first to uppercase
// second to lowercase

$valueUp    = strtoupper($value);
$valueLower = strtolower($value);

Model::where($column, 'LIKE', '%' . ($valueUp || $valueLower) . '%' ); 

没有测试,但这就是赢得比赛的想法。