10
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Phalconのクエリビルダーで生SQL取得

Posted at

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の確認もやりやすくなります。

10
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?