Phalconクエリビルダーから生SQLを取得しよう
Phalconのクエリビルダーは便利だが、SQLのボトルネックを探す時に必要なSQLが取得できない。PHQLという独自のクエリは簡単に取得できるのだがドキュメントがあまりないのでハマった。独自にSQLに書き換えるのもいいが現実的ではない。。。
前提の環境
Phalcon : 3.0.x
PHP : 7.0.x
Phql文の取得
Phql文の取得は公式ドキュメントにもあるように簡単にできる。
<?php
use \Phalcon\Mvc\Model;
class Robot extend Model{
public function testfunc(){
$statment = $this->getModelsManager()->createBuilder()
->from(self::class)
->getPhql();
return statment;
}
}
$robot = new Robot();
echo $robot->testfunc();// SELECT * FROM [Robot]
このPHQLを書き換えてSQLにしようかと思ったが、現実的ではない。
色々なページを検索してみたところ記載があった。
http://stackoverflow.com/questions/21339274/get-raw-sql-from-phalcon-query-builder
実は公式ドキュメントではマニュアルは見当たらないが、getQuery()
を実行した後にgetSql()
を実行することで簡単に取得できることが判明。
<?php
use \Phalcon\Mvc\Model;
class Robot extend Model{
public function testfunc(){
$statment = $this->getModelsManager()->createBuilder()
->from(self::class)
->getQuery();
// getSqlは実行前と実行後でそれぞれ実行が可能
$sql_info = $statment->getSql();
return $sql_info;
// returnを外して、$statment->execute()も実行可能。
}
}
$robot = new Robot();
var_dump($robot->testfunc());// $sql_infoにはSQLとその他パラメータが入る
これで、SQLの確認もやりやすくなります。