[英]Query using accent mark Doctrine + Symfony + PostgreSQL
I have a method in Doctrine repository to search a person like this:我在 Doctrine 存储库中有一个方法来搜索这样的人:
function search($value)
{
$qb = $this->createQueryBuilder('p');
$qb->where($qb->expr()->like(
'LOWER(p.lastName)',
"'%" . mb_strtolower($value) . "%'"));
}
Example:例子:
No不 | Name姓名 | Last name姓 |
---|---|---|
1 1个 | Luis路易斯 | Sanchez桑切斯 |
2 2个 | David大卫 | Sánchez桑切斯 |
When I use this method and the input is 'Sanchez' only returns record No. 1, and if the input is 'Sánchez' only returns record No. 2 (Change a for á).当我使用此方法且输入为“Sanchez”时,仅返回第 1 条记录,如果输入为“Sánchez”,则仅返回第 2 条记录(将 a 更改为 á)。 I need to get all records from my database no matter if the input contains any accent mark (á, é, í, ó, ú).无论输入是否包含任何重音符号(á、é、í、ó、ú),我都需要从我的数据库中获取所有记录。
That function could be solution for your problem unaccent .那 function 可能是您的问题unaccent的解决方案。
And example code here:示例代码在这里:
CREATE TABLE p (
last_name varchar(40) NOT NULL
);
INSERT INTO p VALUES ('Sanchez');
INSERT INTO p VALUES ('Sánchez');
SELECT p.last_name FROM p WHERE unaccent(p.last_name) LIKE CONCAT('%', unaccent('Sánchez'), '%');
SELECT p.last_name FROM p WHERE unaccent(p.last_name) LIKE CONCAT('%', unaccent('Sanchez'), '%');
And the results:结果:
last_name姓 |
---|
Sanchez桑切斯 |
Sánchez桑切斯 |
last_name姓 |
---|
Sanchez桑切斯 |
Sánchez桑切斯 |
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.