Symfony2,doctrine和pgsql,用重音不敏感搜索

时间:2014-04-29 13:01:04

标签: php symfony doctrine-orm

我正在使用Symfony2,我有一个简单的查询与createQueryBuilder,如:

            $qb = $this->_em->createQueryBuilder();
            $qb->select(array('a'))
                    ->from('MyProjectBundle:Account', 'a')
                    ->where('LOWER(a.firstname) LIKE LOWER(?1)')
                    ->setParameters(array(1 => '%'.$search.'%'));
            return $qb->getQuery()->getResult();

我在我的数据库中使用pdo_pgsql,如何为此查询添加重音不敏感?

目前,我只有较低的,但我需要在"Clément"$search时检索帐户"cle"。这是一个自动填充表单(如搜索某人时的facebook)

2 个答案:

答案 0 :(得分:1)

您可以创建自己的DQL函数,然后在config.yml文件中注册它。在配置中注册可以这样做:

# app/config/config.yml
doctrine:
    orm:
        # ...
        dql:
            string_functions:
                test_string: Acme\HelloBundle\DQL\StringFunction
                second_string: Acme\HelloBundle\DQL\SecondStringFunction
            numeric_functions:
                test_numeric: Acme\HelloBundle\DQL\NumericFunction
            datetime_functions:
                test_datetime: Acme\HelloBundle\DQL\DatetimeFunction

创建自己的DQL函数是一个更广泛的问题,但在DQL User Defined Functions中有很好的解释。

答案 1 :(得分:0)

在MySQL中,要以变音符号不敏感的方式从数据库中检索值,您应确保将字段的排序规则设置为中性,例如utf8_general_ci

但是对于PostgreSQL,排序工作方式不同。 也许这个答案可能对你有所帮助:
Does PostgreSQL support "accent insensitive" collations?