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

Laravel 如何在雄辩模型中进行不区分大小写的搜索,laravel,eloquent,Laravel,Eloquent,我想在雄辩的模型中搜索不区分大小写的 现在我用这个 Model::where($column, 'LIKE', '%' . $value . '%' ); 但它是区分大小写的。我怎样才能解决这个问题 我也发现了这篇文章,但我不能在雄辩的模型中使用它你对表格的排序是什么 这是数据库中排序规则的特殊性,请尝试使用拉丁语\u general\u ci或拉丁语\u general\u cs,它们是不区分大小写的 但是,如果您试图通过示例在utf8\u bin中获取该排序规则,它将不会运行,因为该排序

我想在雄辩的模型中搜索不区分大小写的

现在我用这个

Model::where($column, 'LIKE', '%' . $value . '%' ); 
但它是区分大小写的。我怎样才能解决这个问题


我也发现了这篇文章,但我不能在雄辩的模型中使用它

你对表格的排序是什么

这是数据库中排序规则的特殊性,请尝试使用拉丁语\u general\u ci拉丁语\u general\u cs,它们是不区分大小写的

但是,如果您试图通过示例在utf8\u bin中获取该排序规则,它将不会运行,因为该排序规则是敏感的


所有示例都在MySql下运行。

我建议在本例中使用Upper函数

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

类似于此

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

或者为了好玩,不推荐这样做

// 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) . '%' ); 

没有测试它,但这是获胜的想法。

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

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

您确实需要
%
符号来表示您正在搜索的子字符串。

Laravel eloquent search不区分大小写,您不需要在查询中使用ilike、upper或lower函数

只需使用:

Controller::query()
    ->where('column1_name', 'LIKE', "%{$search}%") 
    ->orWhere('column2_name', 'LIKE', "%{$search}%") 
    ->orWhere('column3_name', 'LIKE', "%{$search}%") 
    ->get();
如果您要查询多个表字段,请输入orWhere部分,这应该可以正常工作

替换
$text

$model = Models::whereRaw( 'LOWER(`column`) LIKE ?', [ $text ] )->first();

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

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

您不必将关键字和DB值都转换为同一大小写(大写或小写)。相反,您可以简单地指定“iLIKE”而不是“LIKE”。以下示例返回基于类别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.'%');
});

我正在使用
utf8\u bin
但我不会更改它,我相信这将不可能进行此搜索,限制将在您的表排序规则选择中,任何类型的代码切换都会影响此特殊性。我还没有尝试,但您可以在数据库配置PHP文件上创建另一个与数据库的连接,并在该数组中设置“collation”=>“utf8\u general\u ci”。谢谢您。我不知道如果我的表是utf8\u unicode\u ci,“ci”表示它不区分大小写,所以我不需要在这里使用
ilike
或其他方法。这行不通。如果数据库记录由上下两个字母组成,那么数据库设计将是一个设计糟糕的数据库,请在插入数据库之前准备内容,编程中没有任何内容是自动的。在插入特定记录之前,请准备好它以供查询]您的数据库中有一个名为“John”的用户。当用户像“jo”这样搜索时,您希望获得此记录。在这种情况下,您将如何设计DB?($valueUp | |$valueLower)=>是真的。。所以你的查询应该是:'LIKE','%true%')……那么?如何做到这一点?我认为您有一个额外的点和额外的单引号,即它应该是Model::whereRaw(“UPPER(“$column”)像“%”。strtoupper($value)。“%”;似乎不是secure@id614515有人能详细说明一下,为什么它不安全以及如何改进吗?@Origami1024这是不安全的,因为它容易受到SQL注入的影响。您应该像这样使用参数绑定:
Model::whereRaw('UPPER('{$column}')like?',['%'.strtoupper($value)。'%')
这在MySQL上不起作用,因为它不支持
ILIKE
。在我的PostgreSQL服务器上工作。这只对PostgreSQL有效,但对MySQLWell不起作用,这就是我现在使用的。它工作得很好“Like”操作符在某些情况下区分大小写,而在另一些情况下,根据db排序,我不知道如何向您显示我正在处理的内容的屏幕截图。我的意思是,我也很惊讶它在没有比较案例的情况下在Laravel中有效。我希望你能理解我想说的。这很有效。杰出的