php - 使用重音符号 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 更改为 á)。无论输入是否包含任何重音符号(á、é、í、ó、ú),我都需要从我的数据库中获取所有记录。
解决方案
该功能可以解决您的问题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'), '%');
结果:
姓 |
---|
桑切斯 |
桑切斯 |
姓 |
---|
桑切斯 |
桑切斯 |
推荐阅读
- java - JAX-RS 客户端的自定义主机名解析器
- git - Git中TFVC“回滚”的等价物是什么?
- php - 我如何使用 Eloquent 过滤表和连接表?
- javascript - 如何签署在 javascript 文件中实现的 ActiveXObject 代码?
- ms-access - 如何解决导出到 Excel 错误?
- python - 获取 ValueError:int() 以 10 为底的无效文字:''
- c++ - 使用离散二次插值查找最大值的 (x,y) 子像素坐标
- swift - 如果使用 `freeWhenDone:false` 初始化,Data 的“复制构造函数”是否会复制其引用的字节?
- php - 试图与我的 docker consul 中的外部 ip 通信
- php - 如何获取特定行的总和