2012-01-10 29 views
5

私はこれを多く研究しましたが、答えは「いいえ」ですが、私は間違っていることを証明したいと思います。Doctrine 2.xでREGEXPを使用するORM

REGEXP操作を含むDQLで書かれたクエリを実行したいと思います。 -

select * from assets 
where campaign_id = 1 
and fileName REGEXP 'godzilla*' 
order by fileName desc 

(私の本当の正規表現式はより複雑である。これは、単純な正規表現であり、私が好きなように行うことができる実現するが、それは単なる例です)

$builder->add('select', 'a.fileName') 
     ->add('from', '\Company\Bundle\Entity\Asset a') 
     ->add('where', 'a.campaign=1') 
     ->...REGEXP MAGIC... 
     ->add('orderBy', 'a.fileName desc'); 

通称:たとえば、

私はDoctrine \ ORM \ Query \ ExprクラスとQueryBuilderクラスについて調べました。私はREGEXPをサポートしていません。 SO上の誰かが、Exprクラスを使用していると言う投稿がありますが、実際には動作しません(テストされていません)。

DQLでREGEXPを実行する方法はありますか? TIA。

答えて

3

問合せビルダーがMySQLの(非標準)REGEXP機能の問合せを作成できないだけでなく、問合せを生成できる場合でも、DQLパーサーがそれを理解せずに理解する方法はありませんそれについて何か。

「何か」は、正規表現構文を理解するためにDoctrineのDQLを拡張しています。これは、in a blog postのようにDQLを拡張することで可能です。詳細については

はあなたが一瞬Doctrine2でこれを行うことはできませんMySQL part of DoctrineExtensions

+0

バートリンク、それはもはや最新のものではないのですか(教義1)? –

+1

@PetterSoderlund fixed –

+0

注意すべきことは、REGEXPの最後に比較演算子を追加する必要があります。そうしないと、Doctrineはそれを戻します。 Doctrineは、REGEXPがそれを必要としなくても、すべてのwhere節に比較演算子を持たせる必要があります – Patrick

1

のコードを研究しています。カスタム関数を追加することはできますが、REGEXPは関数ではなく比較演算子です。 Doctrine2の税関比較演算子はまだサポートされていません。このフォーラムのスレッドで

ルック:https://groups.google.com/group/doctrine-user/browse_thread/thread/b98e37fc296c8183/06782192719156c6?lnk=gst&q=regexp#06782192719156c6

あなたはネイティブSQLを使用する必要があります。http://www.doctrine-project.org/docs/orm/2.1/en/reference/native-sql.html

0

次の手順を実行することが可能である、ではないとしてかなりかかわら:ブログ投稿の

$builder->add('select', 'a.fileName') 
     ->add('from', '\Company\Bundle\Entity\Asset a') 
     ->add('where', 'a.someField REGEXP '.$someRegex); 
関連する問題