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

Dav*_*vit 6 laravel eloquent

我不会在雄辩的模型中搜索不区分大小写的代码。现在我习惯了

Model::where($column, 'LIKE', '%' . $value . '%' ); 
Run Code Online (Sandbox Code Playgroud)

但这是区分大小写的。我该如何解决?
我也可以找到此帖子,如何使用LIKE通配符在列中搜索(不区分大小写)?但我不能在雄辩的模型中使用它

小智 13

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

Model::where('column', 'ilike', '%' . $value . '%')
Run Code Online (Sandbox Code Playgroud)

确实需要%标志来表示要搜索的子字符串。

  • 在我的 PostgreSQL 服务器上工作。 (6认同)
  • 这在MySQL上不起作用,因为它不支持`ILIKE`。 (2认同)
  • 这仅适用于 PostgreSQL,但不适用于 MySQL (2认同)

Dam*_*iki 8

Laravel 雄辩搜索不区分大小写,您的查询中不需要类似的 upper 或 lower 函数。

只需使用:

Model::query()
    ->where('column1_name', 'LIKE', "%{$search}%") 
    ->orWhere('column2_name', 'LIKE', "%{$search}%") 
    ->orWhere('column3_name', 'LIKE', "%{$search}%") 
    ->get();
Run Code Online (Sandbox Code Playgroud)

orWhere 部分是为了防止您有多个要查询的表字段

  • 根据数据库排序规则,“Like”运算符在某些情况下区分大小写,而在其他情况下则不区分大小写,请参阅https://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html#operator_like (7认同)

小智 8

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

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


Uni*_*cco 7

这应该有效。

替换column$text

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


小智 5

你的表格排序是怎样的?

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

但是,如果您尝试以utf8_bin为例,它将不会运行,因为此排序规则很敏感。

所有示例都在 MySql 下运行。


小智 5

我建议在这种情况下上功能

Model::whereRaw("UPPER('.$column.') LIKE '%'". strtoupper($value)."'%'"); 
Run Code Online (Sandbox Code Playgroud)

像这样

  • @Origami1024 这不安全,因为它容易受到 SQL 注入的影响。您应该使用这样的参数绑定:`Model::whereRaw('UPPER('{$column}') LIKE ?', ['%' . strtoupper($value) . '%']);` (6认同)
  • 我认为你有一个额外的 *dot* 和额外的单引号,即它应该是 Model::whereRaw("UPPER('$column') LIKE '%".strtoupper($value)."%'"); (4认同)
  • 这似乎不安全 (2认同)