Propelのクエリオブジェクトから生のSQL文を取得するにはどうすればよいですか?私はデバッグの目的でこれが必要です。例えばPropel:クエリオブジェクトからRaw SQLを取得しますか?
:私はこのような何かが存在するか
$rawSql = new BookQuery::create()->filterById(25)->getRawSql();
のような機能を持っていると思いますか?
Propelのクエリオブジェクトから生のSQL文を取得するにはどうすればよいですか?私はデバッグの目的でこれが必要です。例えばPropel:クエリオブジェクトからRaw SQLを取得しますか?
:私はこのような何かが存在するか
$rawSql = new BookQuery::create()->filterById(25)->getRawSql();
のような機能を持っていると思いますか?
はい。あなたはCriteria親クラスからtoString
メソッド後にしている:
$rawSql = (new BookQuery)::create()->filterById(25)->toString();
@jakerellaが言うように、あなたはフィルタリングに使用する特定の値ではなくPropelのよりも、データベースエンジンに拘束されることになる、とあなたが表示されますクエリの構造ですが、正確には何が実行されるのでしょうか。それを確認したい場合は、有効になっているデータベースクエリログを確認できます。
回答が成立した場合は、次のコードを使用してください。
\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 [] []
だから、簡単な...あなたは上記のクエリでは、特定の 'SELECT'列を取得することはありません:) – twigmac
注 - Propelはないその権利のfindの前に。したがって、あなたは次のようなものを見なければなりません: 'SELECT FROM book WHERE id =:p1; ...:p1 => 25' – jakerella
@ジャケレラ:答えでそれを拡大できますか?私はそれがあなたが示唆していることをする方法を明確にしているかどうかはわかりません。 – halfer