获取Doctrine 2实体插入的SQL

Jas*_*ett 6 doctrine-orm

是否有可能获得Doctrine 2实体插入的SQL?

例如,假设我有这个:

$foo = new Foo();
$foo->setName('bar');
$em->persist($foo);
$em->flush();
Run Code Online (Sandbox Code Playgroud)

有没有办法在那里获取INSERT语句的SQL?如果是这样,怎么样?

小智 8

你可以试试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);
Run Code Online (Sandbox Code Playgroud)

它也可以与MySQL之外的其他DBMS一起使用.还有其他可能写入文件.看这里:

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

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


Par*_*lis 6

您可以在MySQL服务器中激活查询日志(猜测就是这样):在/etc/mysql/my.ini(通常的地方):

[mysqld]
log=/tmp/mysql.log
Run Code Online (Sandbox Code Playgroud)

然后阅读此文件,您将在其中找到每个已发布的查询.