如何從Propel中的查詢對象中獲取原始SQL語句?我需要這個用於調試目的。推進:從查詢對象獲取原始SQL?
例如:我想有一個函數在
$rawSql = new BookQuery::create()->filterById(25)->getRawSql();
難道這樣的事情存在嗎?
如何從Propel中的查詢對象中獲取原始SQL語句?我需要這個用於調試目的。推進:從查詢對象獲取原始SQL?
例如:我想有一個函數在
$rawSql = new BookQuery::create()->filterById(25)->getRawSql();
難道這樣的事情存在嗎?
是;你是從Criteria父類的方法toString
後:
$rawSql = (new BookQuery)::create()->filterById(25)->toString();
由於@jakerella說,您用來過濾的具體數值將由數據庫引擎的約束,而不是行走,所以你會看到查詢的結構,但不完全是將執行的內容。如果你想看,那麼你可以檢查你的數據庫查詢日誌,如果它們被啓用。
履行接受的答案,您可以使用下一個代碼之後查詢執行。
\Propel::getConnection()->getLastExecutedQuery() // Returns fully qualified SQL
它可以讓你看到完整的查詢(包括選擇列和獲取參數),將其發送到數據庫。
UPD:(如通過提到@bbird)
此命令不會輸出任何東西,除非useDebug
是true
:
\Propel::getConnection()->useDebug(true);
UPD2:(如果您正在使用Symfony框架)
還有一兩件事值得一提的是PropelORM + 的Symfony。
如果您需要跟蹤SQL,可以使用日誌。推進有它自己的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 [] []
這麼簡單... :) – twigmac 2013-05-02 14:16:20
請注意,你不會在上面的查詢得到具體的'select'列 - 行走確實是正確的查找之前。因此,您必須看到如下所示的內容:'SELECT FROM book WHERE id =:p1; ...:p1 => 25' – jakerella 2013-05-02 15:28:53
@jakerella:你可以在答案中擴展它嗎?我不確定這是否清楚如何去做你的建議。 – halfer 2013-05-02 15:33:04