【问题标题】:Ignore accent in multiple search request忽略多个搜索请求中的重音
【发布时间】:2019-10-08 17:24:07
【问题描述】:

我想知道如何在 Laravel 的 eloquent 中忽略多重搜索中的重音。

目前我有这个:

// $searchTerms => 'Héllo human';
$explodedTerms = explode(" ", $searchTerms); 

...

// $explodedTerms => ['Héllo', 'human'];
$query->where(function ($q) use ($explodedTerms) {
    foreach ($explodedTerms as $value) {
        $q->whereRaw('LOWER(`text`) LIKE ?', ['%'.strtolower($value).'%' ]);
        }
    });
...

我想让搜索词“hello human”与字段文本匹配。

我尝试使用 ILIKE,但出现错误:

$q->whereRaw('LOWER(`text`) ILIKE ?', ['%'.strtolower($value).'%' ]);

SQLSTATE[42000]: 语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 'ILIKE

附近使用的正确语法

【问题讨论】:

  • 感谢@Andreas 为您解答。我尝试了这个解决方案,但结果是“你好”......与“文本”字段不匹配。
  • ILIKE?你喜欢吗?
  • @PaulSpiegel stackoverflow.com/a/21216559/5453732,但使用 whereRaw 不起作用.. 我认为它的逻辑不适用于 whereRaw...
  • @JérémieChazelle - 我从未听说过 MySQL 中的 ILIKE - 它没有多大意义。 MySQL 配置和 laravel 设置中的默认 COLLATION 不区分大小写 (eg. utf8mbr4_unicode_ci)。使用 CI 排序规则,任何 LIKE 和任何 = 搜索始终不区分大小写。 SELECT 'E' = 'e' 默认返回 TRUE。还有SELECT 'E' = 'é'。所以你通常不需要做任何事情。如果简单的 LIKE 不起作用,请发布您的列排序规则。

标签: php mysql sql laravel eloquent


【解决方案1】:

这就是答案 $str = iconv('utf-8','ASCII//IGNORE',$str);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 2017-02-25
    • 1970-01-01
    • 2010-11-24
    • 2011-12-09
    相关资源
    最近更新 更多