我对此进行了大量的研究,我确信答案是否定的,但我很乐意证明这是错误的。
我想执行一个用DQL编写的包含REGEXP操作的查询。例如:
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\Expr类以及QueryBuilder类。我没有看到对REGEXP的支持。有人在SO上发布了一篇文章,说他们使用了Expr类,但这实际上并不起作用(他们说这是未经测试的)。
你知道如何在DQL中执行REGEXP,而不用直接写SQL吗?蒂娅。
发布于 2012-01-11 06:59:49
问题不在于query Builder不能为MySQL中的(非标准) REGEXP功能创建查询,而在于即使您可以生成查询,DQL解析器也无法在不采取任何措施的情况下理解它。
这个“东西”正在扩展Doctrine的DQL以理解正则表达式语法。这可以通过扩展DQL来实现,如in a blog post所述。
有关更多信息,请参阅MySQL part of DoctrineExtensions的代码
发布于 2012-01-11 16:36:27
目前还不能用Doctrine2做到这一点。您可以添加自定义函数,但REGEXP不是一个函数,而是一个比较运算符。在Doctrine2中还不支持自定义比较运算符。
您应该使用原生SQL:http://www.doctrine-project.org/docs/orm/2.1/en/reference/native-sql.html
发布于 2014-01-31 06:34:37
可以执行以下操作,尽管不是很美观:
$builder->add('select', 'a.fileName')
->add('from', '\Company\Bundle\Entity\Asset a')
->add('where', 'a.someField REGEXP '.$someRegex);
https://stackoverflow.com/questions/8810442
复制相似问题