No.437
【CakePHP】実行されたSQLの確認
SQLの確認を簡単に行いたい
一般的には ConnectionManager
の logQueries()
を使用するのが多いと思う。(CakePHP4では enableQueryLogging()
)
でも、毎回これ書くのはすごくめんどくさい。
ログ出力とかやむを得ない場合はしょうがないけど、簡単に画面出力して確認だけ行いたいときは楽な方法があるのでそっちを利用しよう。
※CakePHP3、CakePHP4共通
CakePHPのsql()
CakePHPで拡張されるデバッグコマンドの sql()
を使うと完全なクエリが取得できる。
しかもインデントされていて見やすい。すごい好き。
Retrieving Data & Results Sets > Debugging Queries and ResultSets
$query = $this->Model->find()
->where(...)
->all()
sql($query);
出力はこんな感じ。
SELECT
Model.is AS Model__id,
...
FROM
table Table
WHERE
xxx = yyy,
...
Cake\ORM\Query->sql()
Cake\ORM\Query
の sql()
メソッドを使うことで簡単に取得できる。
この方法は文字列の取得だけなのでログ出力とかにも使用できる。
ただし、変数の値はSQLに反映されていない。そのため完全なSQLではない。
$query = $this->Model->find()
->where(...)
->all()
Log:info($query->sql());
var_dump($query->sql());
...など