2011-12-02 23 views
3

我正在使用Doctrine 2(更準確地說是Doctrine ORM 2.1),並希望查找以數字開頭的條目。隨着本地SQL我會寫這樣的:如何將RLIKE與Doctrine 2結合使用?

SELECT * FROM table WHERE name RLIKE '^[0-9]'; 

但是當我嘗試用DQL做到這一點,我得到以下錯誤:

[Syntax Error] line 0, col 71: Error: Expected =, <, <=, <>, >, >=, !=, got 'RLIKE' 
#0 .../Doctrine/ORM/Query/Parser.php(396): Doctrine/ORM/Query/QueryException::syntaxError('line 0, col 73:...') 
#1 .../Doctrine/ORM/Query/Parser.php(2746): Doctrine/ORM/Query/Parser->syntaxError('=, <, <=, <>, >...') 
#2 .../Doctrine/ORM/Query/Parser.php(2533): Doctrine/ORM/Query/Parser->ComparisonOperator() 
#3 .../Doctrine/ORM/Query/Parser.php(2071): Doctrine/ORM/Query/Parser->ComparisonExpression() 
#4 .../Doctrine/ORM/Query/Parser.php(1994): Doctrine/ORM/Query/Parser->SimpleConditionalExpression() 
#5 .../Doctrine/ORM/Query/Parser.php(1953): Doctrine/ORM/Query/Parser->ConditionalPrimary() 
#6 .../Doctrine/ORM/Query/Parser.php(1927): Doctrine/ORM/Query/Parser->ConditionalFactor() 
#7 .../Doctrine/ORM/Query/Parser.php(1899): Doctrine/ORM/Query/Parser->ConditionalTerm() 
#8 .../Doctrine/ORM/Query/Parser.php(1218): Doctrine/ORM/Query/Parser->ConditionalExpression() 
#9 .../Doctrine/ORM/Query/Parser.php(769): Doctrine/ORM/Query/Parser->WhereClause() 
#10 .../Doctrine/ORM/Query/Parser.php(738): Doctrine/ORM/Query/Parser->SelectStatement() 
#11 .../Doctrine/ORM/Query/Parser.php(210): Doctrine/ORM/Query/Parser->QueryLanguage() 
#12 .../Doctrine/ORM/Query/Parser.php(281): Doctrine/ORM/Query/Parser->getAST() 
#13 .../Doctrine/ORM/Query.php(203): Doctrine/ORM/Query/Parser->parse() 
#14 .../Doctrine/ORM/Query.php(223): Doctrine/ORM/Query->_parse() 
#15 .../Doctrine/ORM/AbstractQuery.php(586): Doctrine/ORM/Query->_doExecute() 
#16 .../Doctrine/ORM/AbstractQuery.php(392): Doctrine/ORM/AbstractQuery->execute(Array, 1) 

我想那是什麼:

$regex = '^[0-9]'; 
$em 
    ->createQuery(' 
     SELECT t 
     FROM MyEntity t 
     WHERE t.visible = true 
      AND t.name RLIKE ?1 
     ORDER BY t.name ASC') 
    ->setParameter(1, $regex) 
    ->getResult(); 

和:

$regex = '^[0-9]'; 
$em 
    ->createQueryBuilder() 
    ->select('t') 
    ->from('MyEntity', 't') 
    ->where('t.visible = true') 
    ->andWhere(new Doctrine\ORM\Query\Expr\Comparison('t.name', 'RLIKE', '?1')) 
    ->orderBy('t.name', 'ASC') 
    ->getQuery() 
    ->setParameter(1, $regex) 
    ->getResult(); 

你有什麼想法,我如何在DQL中使用RLIKE?

此致敬意;)

回答

1

好問題,不幸的是我沒有一個很好的答案。

唯一想到的就是創建自己的DQL函數,就像documentation中提到的那樣。祝你好運;)

也看看this question,也許它會幫助。

如果你解決了這個問題,請發表一個答案。

相關問題