如何从Propel中的查询对象获取原始SQL语句?我需要这个用于调试目的。
例如:我想拥有
中的功能$rawSql = new BookQuery::create()->filterById(25)->getRawSql();
这样的事情是否存在?
答案 0 :(得分:19)
是;你来自Criteria父类的toString
方法:
$rawSql = (new BookQuery)::create()->filterById(25)->toString();
正如@jakerella所说,用于过滤的特定值将受数据库引擎的约束,而不是Propel,因此您将看到查询的结构,但不会确切地知道要执行的内容。如果您想查看,那么您可以检查数据库查询日志,如果它们已启用。
答案 1 :(得分:9)
完成已接受的答案,您可以使用下一个后续代码查询执行。
\Propel::getConnection()->getLastExecutedQuery() // Returns fully qualified SQL
它允许您查看发送到数据库的完整查询(包括选择列和提取的参数)。
UPD :( @bbird 提及)
除非useDebug
为true
:
\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 [] []