Yii2のconsoleアプリで、構築されたSQLを確認する方法

Webアプリの場合にはデバッグモードにしておけばSQLを確認できるのですが、consoleアプリを作っている場合にSQLを見たいと思って調べてみました。

 

まず、consoleアプリで以下のようなSQLを組み立てたとします。

 

$model_schedule =
Schedule::find()->select(['schedule.id', 'schedule.datetime_from', 'subject.task_post_limit', 'teacher.email'])
->leftJoin('subject', 'schedule.subject_id=subject.id')
->leftJoin('teacher', 'schedule.teacher_id=teacher.id')
->where(["between", "date_sub(schedule.datetime_from, interval (subject.task_post_limit+5) minute)", "date_sub(NOW(), interval 7 minute)", "date_sub(now(), interval 2 minute)"]);
 

なんだよ、これというようなSQLですが(笑)、まぁ、なんでもいいです。

 

最後に「->all()」をつけていないことに注目。

 

この直後に、以下の様な1行を書けばSQLが表示されます。

 
var_dump($model_schedule->prepare(Yii::$app->db->queryBuilder)->createCommand()->rawSql);
  

 赤字の$model_scheduleは、最初に挙げたソースの$model_scheduleです。

 

こうすると

 
string(423) "SELECT `schedule`.`id` FROM `schedule` LEFT JOIN `subject` ON schedule.subject_id=subject.id LEFT JOIN `teacher` ON schedule.teacher_id=teacher.id WHERE date_sub(schedule.datetime_from_aest, interval (subject.task_post_limit-5) minute) > date_sub('2016-03-26 21:10', interval 7 minute) and date_sub(schedule.datetime_from_aest, interval (subject.task_post_limit-5) minute) <= date_sub('2016-03-26 21:10', interval 2 minute)"
 

というように表示されます。