我正在将用CodeIgniter编写的简单Web应用程序移植到Symfony2包中 . 我是Symfony2和Doctrine的新手,我遇到一个SQL查询问题,我想在DQL中重写 . 我已准备好进入我的捆绑包,我已经创建了Entity类,我能够将数据插入到数据库中,并以Symfony2提供的面向对象编程方式进行简单查询 . 不幸的是,我不知道如何在DQL中实现这个SQL查询:
$sql = "SELECT * FROM t WHERE
UNIX_TIMESTAMP(t.date) > ".(time()-300)." AND
ROUND(t.x,3) = ".round($x, 3);
正如您所看到的,有一些SQL函数调用需要在数据库服务器上执行 . 主义无法理解这种呼唤 . 当然,我可以选择退出使用Doctrine并使用我的Symfony2包中的基本PDO进行此查询,但我想充分利用Symfony2和Doctrine . 因此,我希望以OOP方式完成此操作,或者使用能够理解类似内容的智能DQL查询:
$em->createQuery("SELECT t FROM MyTestBundle:MyEntity t WHERE t.x = :x")
->setParameter("x", round($x,3));
但是能够将我的SQL查询从旧应用程序重写到我的新包是必须的 . 请帮我找到正确的解决方案 .
2 回答
我知道我遇到的有点迟了但是如果这允许另一个人找到另一种解决方案:
使用捆绑包:Doctrine Extensions
配置config.yml之后:
遗憾的是,您无法在DQL查询中使用SQL函数 . 所以你有两个选择:
您可以在DQL中创建用户定义的函数 . 这是关于如何做到这一点的Doctrine官方文档http://docs.doctrine-project.org/en/latest/cookbook/dql-user-defined-functions.html
或者您可以直接在doctrine中执行SQL查询 . 以下是在Doctrine中使用Native SQL的官方文档http://docs.doctrine-project.org/en/latest/reference/native-sql.html
从问题的日期来看,我不认为这可以帮助你,但我希望它可以帮助那些有同样问题的人