2015-06-25 52 views
1

我使用的是Doctrine 2.1,需要在MySQL中使用REGEXP。Doctrine擴展名REGEXP不能在Symfony2中工作

REGEXP目前不支持在教義默認安裝的,所以我用beberlei/DoctrineExtensions

我不能教到承認我REGEXP,我按照上SO的例子。

我使用學說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 

UPDATE:

我已經更新查詢,以符合預期格式

$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

我認爲你需要像'WHERE REGEXP(g.name,'^ [:alpha:]')'這樣做。這將通過擴展名轉換爲'(g.name REGEXP'^ [:alpha:]')'。 – qooplmao

+0

@Qoop我改變了我的查詢來匹配你的建議,但現在我得到了'[Syntax Error] line 0,col -1:Error:Expected =,<, <=, <>,>,> =,!=,得到了字符串的結尾。 – Patrick

+0

@Qoop如果我在查詢的末尾添加一個'= 1',它會運行,但現在SQL不是我所需要的:-('SELECT g FROM {$ this - > _ entityName} g WHERE REGEXP(g。名稱,'^ [:alpha:]')= 0' – Patrick

回答

2

我發現這個項目

主義需要通過github page的解決方案,所有的where子句需要一個比較操作即使像REGEXP這樣的子句並不需要它。

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

此外,我的正則表達式字符類在我原來的問題是不正確的。

+0

引號很重要! ('REGEXP(t.something,'^ [0-9] {12} $')= 1)) - - > andWhere('REGEXP(t.something,'^ [0-9] {12} $「)= 1') - 不起作用 –