18

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

例如:我想有一个功能,如

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

这样的事情存在吗?

4

2 回答 2

22

是的; 你在Criteria父类的toString方法之后:

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

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

于 2013-05-02T13:35:03.697 回答
11

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

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

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


UPD:(@bbird所述

此命令不会输出任何内容,除非useDebugtrue

\Propel::getConnection()->useDebug(true);

UPD2:(如果您使用Symfony 框架

还有一件事值得一提的是PropelORM + Symfony

如果您需要跟踪 SQL,可以使用日志。Propel 有它自己的独白通道propel,并且完全合格的查询会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 [] []
于 2014-10-17T11:00:52.760 回答