Doctrine Extensions REGEXP无法在Symfony2

时间:2015-06-25 15:45:19

标签: php regex symfony doctrine-orm

我使用的是Doctrine 2.1,需要在MySQL中使用REGEXP。

Doctrine的默认安装目前不支持REGEXP,所以我使用的是beberlei / DoctrineExtensions

我无法让Doctrine识别我的REGEXP,我已经按照SO上的示例。

我使用的是Doctrine 2.1和Symfony 2.7.1

这里是代码,任何想法?

配置

# config.yml
# Doctrine Configuration
doctrine:
    dbal:
        driver:   "%database_driver%"
        host:     "%database_host%"
        port:     "%database_port%"
        dbname:   "%database_name%"
        user:     "%database_user%"
        password: "%database_password%"
        charset:  UTF8
        keep_slave: true
        slaves:   %database_slaves%

    orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        auto_mapping: true
        metadata_cache_driver: apc
        query_cache_driver: apc
        result_cache_driver:
            type: service
            id: cache
        dql:
            string_functions:
                regexp: DoctrineExtensions\Query\Mysql\Regexp

存储库

// GroupRepository
            $dql = "SELECT g FROM {$this->_entityName} g WHERE g.name REGEXP '^[:alpha:]'";
            return $this->getEntityManager()->createQuery($dql)->getResult();

页面加载错误

// Error
CRITICAL - Uncaught PHP Exception Doctrine\ORM\Query\QueryException: "[Syntax Error] line 0, col 64: Error: Expected =, <, <=, <>, >, >=, !=, got 'REGEXP'" at /symfony/vendor/doctrine/orm/lib/Doctrine/ORM/Query/QueryException.php line 52 

更新:

我已更新查询以匹配预期格式

    $dql = "SELECT g FROM {$this->_entityName} g WHERE REGEXP(g.name, '^[:alpha:]')";

现在我开始收到一个新错误:

[Syntax Error] line 0, col -1: Error: Expected =, <, <=, <>, >, >=, !=, got end of string.

1 个答案:

答案 0 :(得分:2)

我通过项目的github page找到了解决方案

Doctrine要求所有where子句都需要比较运算符,即使像REGEXP这样的子句也不需要它。

resolve

我的正则表达式字符类在我原来的问题中也是不正确的。