【发布时间】: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