6

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

例如,假设我有这个:

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

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

4

2 回答 2

9

你可以试试 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);

它也适用于 MySQL 以外的其他 DBMS。还有其他写入文件的可能性。看这里:

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

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

于 2017-04-22T14:03:36.067 回答
6

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

[mysqld]
log=/tmp/mysql.log

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

于 2012-08-28T19:06:03.537 回答