Propel:从Query对象获取Raw SQL?

时间:2013-05-02 11:06:43

标签: php sql orm propel

如何从Propel中的查询对象获取原始SQL语句?我需要这个用于调试目的。

例如:我想拥有

中的功能
$rawSql = new BookQuery::create()->filterById(25)->getRawSql();

这样的事情是否存在?

2 个答案:

答案 0 :(得分:19)

是;你来自Criteria父类的toString方法:

$rawSql = (new BookQuery)::create()->filterById(25)->toString();

正如@jakerella所说,用于过滤的特定值将受数据库引擎的约束,而不是Propel,因此您将看到查询的结构,但不会确切地知道要执行的内容。如果您想查看,那么您可以检查数据库查询日志,如果它们已启用。

答案 1 :(得分:9)

完成已接受的答案,您可以使用下一个后续代码查询执行。

\Propel::getConnection()->getLastExecutedQuery() // Returns fully qualified SQL

它允许您查看发送到数据库的完整查询包括选择列和提取的参数)。


UPD :( @bbird 提及

除非useDebugtrue

,否则此命令不会输出任何内容
\Propel::getConnection()->useDebug(true);

UPD2 :( 如果您使用 Symfony框架

值得一提的另一件事是 PropelORM + Symfony

如果需要跟踪SQL,可以使用日志。 Propel拥有自己的名为propel的{​​{3}}频道,并且在相关频道( DEBUG )上使用propel.DEBUG日志级别记录完全限定查询。

日志/查询记录如下所示:

[2016-10-04 17:00:46] propel.DEBUG: time:  0.000 sec | mem:   24.8 MB | connection: default | SELECT `id`, `username`, `email`, `last_login` FROM `users` WHERE `id` = 123 [] []