带有重音字符的 SQL 查询构建器

问题描述 投票:0回答:1

我在 Symfony 项目中使用 querybuilder 使用名字、姓氏、地址等多个参数来索引我的所有人员实体...

每个人最多可以有 3 个名字。我在表单中使用 select2 来允许用户在同一输入字段中写入多个名字。

一切正常,除了以下事实:如果我在字段中输入重音字符(例如 Rémy),我会收到以下错误:

[Syntax Error] line 0, col 730: Error: Expected end of string, got 'é'

我尝试了所有方法,但找不到错误,这是我的 PersonRepository 中管理名字参数的代码:

    if (!empty($firstNames)) {
        $orConditions = $qb->expr()->orX(); 
    
        foreach ($firstNames as $firstName) {
            $orConditions->add(
                $qb->expr()->like('LOWER(ip.firstName)', ':firstName' . $firstName)
            );
            $qb->setParameter(':firstName' . $firstName, '%' . mb_strtolower($firstName, 'UTF-8') . '%');
        }
    
        $qb->andWhere($orConditions); 
    }

你们能帮我吗?

php symfony conditional-statements repository query-builder
1个回答
0
投票

根据您的评论,我认为这应该可行。由于您的数组键与值相同,我们只需手动跟踪索引即可。

if (!empty($prenoms)) {
    $orConditions = $qb->expr()->orX();
    $idx = 0;
    foreach ($prenoms as $prenom) {
        $orConditions->add($qb->expr()->like('LOWER(ip.prenom)', ':prenom_'.$idx));
        $qb->setParameter(':prenom_'.$idx, '%'.mb_strtolower($prenom, 'UTF-8').'%');
        $idx++;
    }
    $qb->andWhere($orConditions);
}
© www.soinside.com 2019 - 2024. All rights reserved.