我使用的是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.
我認爲你需要像'WHERE REGEXP(g.name,'^ [:alpha:]')'這樣做。這將通過擴展名轉換爲'(g.name REGEXP'^ [:alpha:]')'。 – qooplmao
@Qoop我改變了我的查詢來匹配你的建議,但現在我得到了'[Syntax Error] line 0,col -1:Error:Expected =,<, <=, <>,>,> =,!=,得到了字符串的結尾。 – Patrick
@Qoop如果我在查詢的末尾添加一個'= 1',它會運行,但現在SQL不是我所需要的:-('SELECT g FROM {$ this - > _ entityName} g WHERE REGEXP(g。名稱,'^ [:alpha:]')= 0' – Patrick