twi*_*mac 18 php sql orm propel
如何从Propel中的查询对象获取原始SQL语句?我需要这个用于调试目的.
例如:我想要一个函数
$rawSql = new BookQuery::create()->filterById(25)->getRawSql();
Run Code Online (Sandbox Code Playgroud)
这样的事情存在吗?
hal*_*fer 20
是; 你是在Criteria父类的toString
方法之后:
$rawSql = (new BookQuery)::create()->filterById(25)->toString();
Run Code Online (Sandbox Code Playgroud)
正如@jakerella所说,用于过滤的特定值将受数据库引擎的约束,而不是Propel,因此您将看到查询的结构,但不会确切地知道要执行的内容.如果要查看,则可以检查数据库查询日志(如果已启用).
Pau*_*een 10
履行接受的答案,你可以使用下面的代码之后执行查询.
\Propel::getConnection()->getLastExecutedQuery() // Returns fully qualified SQL
Run Code Online (Sandbox Code Playgroud)
它允许您查看发送到数据库的完整查询(包括选择列和获取的参数).
UPD :( 如@bbird所述)
除非useDebug
是true
:否则此命令不会输出任何内容:
\Propel::getConnection()->useDebug(true);
Run Code Online (Sandbox Code Playgroud)
UPD2 :( 如果您使用的是Symfony框架)
另外值得一提的是PropelORM + Symfony.
如果需要跟踪SQL,则可以使用日志.Propel有自己的monolog通道调用,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 [] []
Run Code Online (Sandbox Code Playgroud)