Propel:从 Query 对象获取 Raw SQL?

2022-08-30 22:03:45

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

例如:我想有一个函数,如

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

这样的事情存在吗?


答案 1

是的;您位于条件父类中的方法之后:toString

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

正如@jakerella所说,用于筛选的特定值将由数据库引擎而不是Propel绑定,因此您将看到查询的结构,但不会确切地看到将要执行的内容。如果要查看,则可以检查数据库查询日志(如果已启用)。


答案 2

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

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

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


UPD:(@bbird)

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

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

UPD2:(如果您使用的是Symfony框架)

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

如果需要跟踪 SQL,则可以使用日志。Propel 有自己的 monolog 通道,调用,并在相关通道上记录完全限定的查询,并带有日志级别(propel.调试)。propelDEBUG

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

[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 [] []

推荐