首页 > 解决方案 > 使用重音符号 Doctrine + Symfony + PostgreSQL 查询

问题描述

我在 Doctrine 存储库中有一个方法可以搜索这样的人:

 function search($value)
{
    $qb = $this->createQueryBuilder('p');
    $qb->where($qb->expr()->like(
        'LOWER(p.lastName)',
        "'%" . mb_strtolower($value) . "%'"));
}

例子:

姓名
1 路易斯 桑切斯
2 大卫 桑切斯

当我使用此方法且输入为“Sanchez”时,仅返回记录号 1,如果输入为“Sánchez”,则仅返回记录号 2(将 a 更改为 á)。无论输入是否包含任何重音符号(á、é、í、ó、ú),我都需要从我的数据库中获取所有记录。

标签: phppostgresqlsymfonydoctrine

解决方案


该功能可以解决您的问题unaccent

以及这里的示例代码:

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'), '%');

结果:

桑切斯
桑切斯
桑切斯
桑切斯

推荐阅读