Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Doctrine orm Doctrine UnitOfWork原子场更改的额外查询_Doctrine Orm - Fatal编程技术网

Doctrine orm Doctrine UnitOfWork原子场更改的额外查询

Doctrine orm Doctrine UnitOfWork原子场更改的额外查询,doctrine-orm,Doctrine Orm,当调用flush时,我发现自己需要在同一事务中执行原始SQL(或DQL),如下所示: $em->persist($obj); // add `UPDATE table SET counter = counter + 1 WHERE id = X` $em->flush() 我环顾四周,找不到任何地方可以像那样注入SQL 如果函数不知道或不关心何时调用flush,并且不想调用flush本身或执行以下操作,则会发生这种情况: $em->getConnection()->be

当调用
flush
时,我发现自己需要在同一事务中执行原始SQL(或DQL),如下所示:

$em->persist($obj);
// add `UPDATE table SET counter = counter + 1 WHERE id = X`
$em->flush()
我环顾四周,找不到任何地方可以像那样注入SQL

如果函数不知道或不关心何时调用
flush
,并且不想调用
flush
本身或执行以下操作,则会发生这种情况:

$em->getConnection()->beginTransaction();
$em->flush($obj);
$em->getConnection()->executeUpdate('UPDATE table SET counter = counter + 1 WHERE id = X');
$em->getConnection()->commit();

在我开始制作自己的事件处理程序和服务之前,是否有一种内置的方法来实现这一点?它从各地收集SQL并在flush上执行?

实现这一点的方法是使用Doctrine事件并创建自己的事件侦听器。这就是你所说的“制作我自己的事件处理程序”吗?是的,这就是我的意思。如果没有内置的,那么我会有一个收集SQL语句的服务和一个处理
onFlush
并在那一点上执行这些SQL语句的条令事件处理程序。这就是你的方法。