2013-05-02 8 views
17

Propelのクエリオブジェクトから生のSQL文を取得するにはどうすればよいですか?私はデバッグの目的でこれが必要です。例えばPropel:クエリオブジェクトからRaw SQLを取得しますか?

:私はこのような何かが存在するか

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

のような機能を持っていると思いますか?

答えて

19

はい。あなたはCriteria親クラスからtoStringメソッド後にしている:

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

@jakerellaが言うように、あなたはフィルタリングに使用する特定の値ではなくPropelのよりも、データベースエンジンに拘束されることになる、とあなたが表示されますクエリの構造ですが、正確には何が実行されるのでしょうか。それを確認したい場合は、有効になっているデータベースクエリログを確認できます。

+2

だから、簡単な...あなたは上記のクエリでは、特定の 'SELECT'列を取得することはありません:) – twigmac

+2

注 - Propelはないその権利のfindの前に。したがって、あなたは次のようなものを見なければなりません: 'SELECT FROM book WHERE id =:p1; ...:p1 => 25' – jakerella

+0

@ジャケレラ:答えでそれを拡大できますか?私はそれがあなたが示唆していることをする方法を明確にしているかどうかはわかりません。 – halfer

8

回答が成立した場合は、次のコードを使用してください。

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

それはあなたがデータベースに送信された(選択した列とフェッチされたパラメータ含む完全なクエリを見ることができます。


UPD

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

UPD2:このコマンドは出力されません何がuseDebugない限りtrueある

で述べたようにを@bbird):言及する価値(あなたはsymfonyフレームワークを使用している場合)

もう一つはPropelORM + symfonyのです。

SQLをトレースする必要がある場合は、ログを使用することができます。 Propelにはpropelというmonologというチャネルがあり、完全修飾クエリは関連チャネル(propel.DEBUG)にログレベルが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 [] [] 
+1

非常に有望な提案!私はこれを試すことを楽しみにしています。 – twigmac

+2

useDebugが真でない限り、このコマンドは何も出力しません:$ con = Propel :: getConnection(); $ con-> useDebug(true); $ con-> getLastExecutedQuery(); – bbird

関連する問題