2012-08-28 7 views
5

Doctrine 2エンティティの挿入用のSQLを取得することは可能ですか?そこにINSERT文のSQLを取得する方法はありDoctrine 2エンティティ用のSQLを取得する

$foo = new Foo(); 
$foo->setName('bar'); 
$em->persist($foo); 
$em->flush(); 

:たとえば

、のは、私はこれを持っているとしましょうか?もしそうなら、どうですか?

答えて

6

あなたは(それはそれだ推測)MySQLサーバにクエリログを活性化できる:/etc/mysql/my.ini(いつもの場所)で :

[mysqld] 
log=/tmp/mysql.log 

、あなたは見つけるでしょう、このファイルを読みます発行された各問合せ。

+0

当たり前、そうそう。ありがとう。 –

+0

初心者の方は、設定ファイルを更新した後に 'sudo service mysql restart'を実行する必要があります。 –

+0

データベースがデータ集約型の場合、これは必ずしも便利ではありません。プログラムでいくつかのロギングを行う方法があると良いでしょう – Dennis

3

あなたは、SQL-ロガーを試みることができる:

$em->flush(); // to write cached stuff down and isolate the following 

// activate logger 
$em->getConnection() 
    ->getConfiguration() 
    ->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger()); 

$foo = new Foo(); 
$foo->setName('bar'); 
$em->persist($foo); 
$em->flush(); 

// disable logger 
$em->getConnection() 
    ->getConfiguration() 
    ->setSQLLogger(null); 

それはあまりにもMySQLの以外のDBMSで動作します。ファイルに書き込むことも可能です。ここを見て:

https://www.brunsware.de/blog/symfony/monolog-doctrine-logfile.html

http://vvv.tobiassjosten.net/symfony/logging-doctrine-queries-in-symfony2/

関連する問題