簡體   English   中英

使用重音符號查詢 Doctrine + Symfony + PostgreSQL

[英]Query using accent mark 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 更改為 á)。 無論輸入是否包含任何重音符號(á、é、í、ó、ú),我都需要從我的數據庫中獲取所有記錄。

那 function 可能是您的問題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'), '%');

結果:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM