简体   繁体   English

使用重音符号查询 Doctrine + Symfony + PostgreSQL

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM