Dar*_*ski 5 php sql dql symfony doctrine-orm
我正在将用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);
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,有一些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));
Run Code Online (Sandbox Code Playgroud)
但是能够将我的SQL查询从旧应用程序重写到我的新包是必须的.请帮我找到正确的解决方案.
Sno*_*zer 11
我知道我遇到的有点迟了但是如果这允许对方找到另一种解决方案:
使用bundle:Doctrine Extensions
配置config.yml之后:
doctrine:
orm:
dql:
string_functions:
UNIX_TIMESTAMP: DoctrineExtensions\Query\Mysql\UnixTimestamp
Run Code Online (Sandbox Code Playgroud)
小智 -2
遗憾的是,您无法在 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
从问题的日期来看,我认为这现在对您没有帮助,但我希望它可以帮助其他有同样问题的人
| 归档时间: |
|
| 查看次数: |
5688 次 |
| 最近记录: |