Php 带SQL函数的DQL查询
我正在将用CodeIgniter编写的简单web应用程序移植到Symfony2包。我是Symfony2和Doctrine的新手,有一个SQL查询有问题,我想用DQL重写。我已经准备好进入我的包,我已经创建了实体类,我能够将数据插入数据库,并以Symfony2提供的面向对象编程方式进行简单查询。不幸的是,我不知道如何在DQL中实现此SQL查询:Php 带SQL函数的DQL查询,php,sql,symfony,doctrine-orm,dql,Php,Sql,Symfony,Doctrine Orm,Dql,我正在将用CodeIgniter编写的简单web应用程序移植到Symfony2包。我是Symfony2和Doctrine的新手,有一个SQL查询有问题,我想用DQL重写。我已经准备好进入我的包,我已经创建了实体类,我能够将数据插入数据库,并以Symfony2提供的面向对象编程方式进行简单查询。不幸的是,我不知道如何在DQL中实现此SQL查询: $sql = "SELECT * FROM t WHERE UNIX_TIMESTAMP(t.date) > ".(time()-300)." A
$sql = "SELECT * FROM t WHERE
UNIX_TIMESTAMP(t.date) > ".(time()-300)." AND
ROUND(t.x,3) = ".round($x, 3);
正如您所看到的,有些SQL函数调用需要在数据库服务器上执行。条令无法理解这一要求。当然,我可以选择退出使用条令,在我的Symfony2包中使用基本PDO进行查询,但我希望充分利用使用Symfony2和条令的优势。因此,我希望以面向对象的方式或使用聪明的DQL查询来完成这项工作,该查询可以理解如下内容:
$em->createQuery("SELECT t FROM MyTestBundle:MyEntity t WHERE t.x = :x")
->setParameter("x", round($x,3));
但必须能够将我的SQL查询从旧应用程序重写到新包中。请帮助我找到正确的解决方案。不幸的是,您不能在DQL查询中使用SQL函数。因此,您有两种选择:
从问题的日期来看,我不认为这对你现在有帮助,但我希望它能帮助其他有同样问题的人我知道我遇到的时间有点晚,但如果这能让其他人找到替代解决方案: 使用捆绑包: 配置config.yml后:
doctrine:
orm:
dql:
string_functions:
UNIX_TIMESTAMP: DoctrineExtensions\Query\Mysql\UnixTimestamp