スポンサードリンク

CakePHPのブログチュートリアルの削除(deleteアクション)のように
コントローラー内で作業をさせて
終わったらリダイレクトして
そのアクションのビューを使わないということがあります。
この動きだと、DebugモードのSQL文が表示されないため
動きがおかしかった時に確認がし辛かったので
一時的にリダイレクト先でもSQL文が見れるようにしました。
スポンサードリンク
リダイレクト先でもSQL文を見る方法
1.アクション内のSQL文を取得する
2.SQL文をセッションで保存
3.リダイレクト先でセッションの中身を表示
こんな感じです。
1.ページ内のSQL文を取得する
アクション内で使っているSQL文が
どういうものかを調べます。
コントローラー内で以下を実行します。
debug($this->Model->getDataSource()->getLog());
これで実行しているSQL文が以下のような連想配列でビューに表示されます。
array( 'log' => array( (int) 0 => array( 'query' => 実行したSQL文, 'params' => array(), 'affected' => (int) 20, 'numRows' => (int) 20, 'took' => (float) 1 ), (int) 1 => array( 'query' => 実行したSQL文, 'params' => array(), 'affected' => (int) 20, 'numRows' => (int) 20, 'took' => (float) 1 ), ・・・
2.SQL文をセッションで保存
次に先ほど表示させたSQL文をセッションに保存します。
※ビューを使わずにリダイレクトさせるアクション内
//リダイレクトの前に記述 if($this->Session->check('sql')){ $this->Session->delete('sql'); } $this->Session->write('sql',$this->Model->getDataSource()->getLog()); $this->redirect(array('action' => 'index'));
sqlという名前でセッションに保存させます。
保存する前に古いsqlがあるかをチェックしてます。
3.リダイレクト先でセッションの中身を表示
次にリダイレクト先でセッションを取得して表示します。
上記の例だとindexアクションに書きます。
※リダイレクト先のアクション
if($this->Session->check('sql')){ $sql = $this->Session->read('sql'); $this->set('sql', $sql); }
ビューにSQL文を表示させたい場所に以下を書きます。
※リダイレクト先のビュー
<?php if(!empty($sql)){ foreach($sql['log'] as $s){ echo $s['query'] . "<br>"; } } ?>
こうすると、リダイレクト前のSQL文が表示されて
チェックができます。
(参考)
CakePHPのView以外で実行されたSQLを見る方法
スポンサードリンク