2012-08-28 28 views
5

Có thể lấy SQL cho một thực thể chèn Doctrine 2 không?Lấy SQL cho một thực thể Doctrine 2 chèn

Ví dụ, chúng ta hãy nói rằng tôi có điều này:

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

Có cách nào để có được SQL cho các câu lệnh INSERT có? Nếu vậy, làm thế nào?

Trả lời

6

Bạn có thể kích hoạt các bản ghi truy vấn trong máy chủ MySQL của bạn (đoán nó là xong): trong /etc/mysql/my.ini (nơi bình thường):

[mysqld] 
log=/tmp/mysql.log 

sau đó đọc tập tin này, nơi bạn sẽ tìm thấy mỗi truy vấn được phát hành.

+0

Oh yeah, duh. Cảm ơn. –

+0

Và đối với người không được khởi tạo, bạn có thể cần chạy 'sudo service mysql restart' sau khi bạn cập nhật tệp cấu hình. –

+0

điều này không phải lúc nào cũng thuận tiện khi Cơ sở dữ liệu của bạn tập trung vào dữ liệu. Nó sẽ là tốt để có một cách để làm một số đăng nhập lập trình – Dennis

3

Bạn có thể thử các SQL-Logger:

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

Nó hoạt động với DBMS khác ngoài MySQL quá. Ngoài ra còn có khả năng khác để viết trong các tập tin. Nhìn đây:

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

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

Các vấn đề liên quan