No.437


【CakePHP】実行されたSQLの確認

SQLの確認を簡単に行いたい

 一般的には ConnectionManagerlogQueries() を使用するのが多いと思う。(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\Querysql() メソッドを使うことで簡単に取得できる。
 この方法は文字列の取得だけなのでログ出力とかにも使用できる。

 ただし、変数の値はSQLに反映されていない。そのため完全なSQLではない。

$query = $this->Model->find()
         ->where(...)
         ->all()

Log:info($query->sql());
var_dump($query->sql());
...など