Propelのクエリオブジェクトから生の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 [〜#〜]:( @bbird)
このコマンドは、useDebug
がtrue
でない限り、何も出力しません。
\Propel::getConnection()->useDebug(true);
UPD2:(Symfonyフレームワークを使用している場合)
言及する価値のあるもう1つのことは、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 [] []