我正在将使用CodeIgniter编写的简单Web应用程序移植到Symfony2 Bundle中。虽然我已经创建了实体类并能够以面向对象的方式插入数据和执行简单查询,但是由于我对Symfony2和Doctrine不熟悉,因此我在一条SQL查询中遇到了问题,我想将其重写为DQL。遗憾的是,我不知道如何在DQL中实现这个SQL查询:
$sql = "SELECT * FROM t WHERE
UNIX_TIMESTAMP(t.date) > ".(time()-300)." AND
ROUND(t.x,3) = ".round($x, 3);
正如你所看到的,有一些需要在数据库服务器上执行的SQL函数调用。Doctrine无法理解这些调用。当然,我有一个选项,可以放弃使用Doctrine,并在Symfony2 bundle内使用基本的PDO执行此查询,但我想充分利用Symfony2和Doctrine的优势。因此,我希望以面向对象的方式完成这个任务,或者使用聪明的DQL查询来理解以下内容:
$em->createQuery("SELECT t FROM MyTestBundle:MyEntity t WHERE t.x = :x")
->setParameter("x", round($x,3));
但是,将旧应用程序中的SQL查询重写到我的新包中是必须的。请帮助我找到正确的解决方案。