Transactions 原则2事务划分:隐式与显式

Transactions 原则2事务划分:隐式与显式,transactions,doctrine-orm,Transactions,Doctrine Orm,我正在阅读条令2文件,对交易的划分有疑问。以下两段代码之间有什么区别吗(除了语法之外)?或者这仅仅是做同样事情的两种方式(即隐式和显式)。首选的方法/最佳实践是什么(隐式还是显式) 隐含的: // $em instanceof EntityManager $user = new User; $user->setName('George'); $em->persist($user); $em->flush(); 明确的: // $em instanceof EntityMana

我正在阅读条令2文件,对交易的划分有疑问。以下两段代码之间有什么区别吗(除了语法之外)?或者这仅仅是做同样事情的两种方式(即隐式和显式)。首选的方法/最佳实践是什么(隐式还是显式)

隐含的:

// $em instanceof EntityManager
$user = new User;
$user->setName('George');
$em->persist($user);
$em->flush();
明确的:

// $em instanceof EntityManager
$em->transactional(function($em) {
    $user = new User;
    $user->setName('George');
    $em->persist($user);
});
报告说:

当您希望包含时,需要显式事务划分 工作单元中的自定义DBAL操作,或当您希望使用 EntityManager API中需要活动 交易此类方法将向抛出TransactionRequiredException 通知你这个要求


在其他情况下没有区别,您可以使用两种方法中的任何一种(我更喜欢隐式方法来减少噪音)。

如果我尝试中断函数($em),如何将自定义参数传递给函数($em)?@blackuprise
function($em)use($yourargument){$yourargument…}