Doctrine orm 获取Doctrine 2实体插入的SQL

Doctrine orm 获取Doctrine 2实体插入的SQL,doctrine-orm,Doctrine Orm,是否有可能获取Doctrine 2实体插入的SQL 例如,假设我有: $foo = new Foo(); $foo->setName('bar'); $em->persist($foo); $em->flush(); 有没有办法获取INSERT语句的SQL?如果是,如何激活?您可以在MySQL服务器中激活查询日志(猜测是它): 在/etc/mysql/my.ini(通常的位置)中: 然后阅读此文件,您将在其中找到每个发出的查询。您可以尝试SQL Logger: $em->

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

例如,假设我有:

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

有没有办法获取INSERT语句的SQL?如果是,如何激活?

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


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

您可以尝试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。还有其他写入文件的可能性。看这里:


对于未初始化的用户,更新配置文件后可能需要运行
sudo service mysql restart
。在数据库数据密集型的情况下,这并不总是很方便。这将是一个很好的办法,做一些日志编程CallyHorrible的想法,MariaDB(MySQL)不会重新启动;如果你这样做。顺便说一句:在mariadb 10.3.22-mariadb-1ubuntu1中。我猜它在/etc/mysql/mariadb.conf.d/50-server.cnf中已经有log_错误变量
$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);