2012-08-28 25 views
5

Bir Doctrine 2 öğesi eki için SQL'i almak mümkün mü? Orada INSERT deyimi için SQL almak için bir yolu var mıBir Doctrine 2 öğesi için SQL'i alın

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

: Örneğin

, en bende bu var diyelim? Öyleyse nasıl?

cevap

6

Sen MySQL sunucusuna sorgu günlüğünü etkinleştirmek olabilir (bunu olduğunu tahmin): /etc/mysql/my.ini içinde (her zamanki yeri): Eğer bulacaksınız

[mysqld] 
log=/tmp/mysql.log 

sonra bu dosyayı okumak her yayınlanan sorgu.

+0

Yaa, evet. Teşekkürler. –

+0

Ve başlatılmamış için, config dosyasını güncelledikten sonra 'sudo service mysql restart' çalıştırmanız gerekebilir. –

+0

Bu, Veritabanınız veri yoğun olduğunda her zaman uygun değildir. Programlı olarak günlüğe kaydetme yapmanın bir yolu olması iyi olacaktır. – Dennis

3

SQL-Logger deneyebilirsiniz:

$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); 

Çok MySQL dışındaki DBMS ile çalışır. Dosyalara yazmanın başka olasılıkları da vardır. Buraya bak:

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

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

İlgili konular