mr-*_*-sk 5 php orm doctrine doctrine-orm
我研究了很多,我确信答案是否定的,但我很想证明是错的.
我想执行用DQL编写的包含REGEXP操作的查询.例如:
select * from assets
where campaign_id = 1
and fileName REGEXP 'godzilla*'
order by fileName desc
Run Code Online (Sandbox Code Playgroud)
又名
$builder->add('select', 'a.fileName')
->add('from', '\Company\Bundle\Entity\Asset a')
->add('where', 'a.campaign=1')
->...REGEXP MAGIC...
->add('orderBy', 'a.fileName desc');
Run Code Online (Sandbox Code Playgroud)
(这是一个简单的正则表达式,我意识到可以像LIKE一样完成,但它只是一个例子 - 我真正的正则表达式更复杂)
我查看了Doctrine\ORM\Query\Expr类以及QueryBuilder类.我看不到对REGEXP的支持.有人在SO上发帖说他们使用了Expr类,但这实际上并不起作用(他们说这是未经测试的).
任何想法如何在DQL中执行REGEXP w/out直接编写SQL?TIA.
问题不在于查询生成器无法为 MySQL 中的(非标准)REGEXP 功能创建查询,而在于即使您可以生成查询,DQL 解析器也无法在不采取任何措施的情况下理解它。
\n\n这个“东西”正在扩展 Doctrine\xe2\x80\x99s DQL 以理解正则表达式语法。这可以通过扩展 DQL 来实现,如博客文章中所述。
\n\n有关更多信息,请研究DoctrineExtensions 的 MySQL 部分的代码
\n