有兩個實體:沖洗在實體導致無限循環(學說2)
A: which will auto update something on B
B
所述的有一個更新前:
@ORM\PreUpdate
public function asd()
{
foreach (\Doctrine\Repository\B::getInstance()->findxxxx($sdf) as $x)
{
$em->remove($x);
$em->flush(); *******
}
}
我跟蹤的SQL日誌:
Doctrine\Entity\Accommodation.php: 1116
Doctrine\vendor\doctrine\orm\lib\Doctrine\ORM\Event\ListenersInvoker.php: 102
Doctrine\vendor\doctrine\orm\lib\Doctrine\ORM\UnitOfWork.php: 1064
Doctrine\vendor\doctrine\orm\lib\Doctrine\ORM\UnitOfWork.php: 384
Doctrine\vendor\doctrine\orm\lib\Doctrine\ORM\EntityManager.php: 356
Doctrine\Entity\Accommodation.php: 1116
Doctrine\vendor\doctrine\orm\lib\Doctrine\ORM\Event\ListenersInvoker.php: 102
Doctrine\vendor\doctrine\orm\lib\Doctrine\ORM\UnitOfWork.php: 1064
Doctrine\vendor\doctrine\orm\lib\Doctrine\ORM\UnitOfWork.php: 384
Doctrine\vendor\doctrine\orm\lib\Doctrine\ORM\EntityManager.php: 356
Doctrine\Entity\Accommodation.php: 1116
Doctrine\vendor\doctrine\orm\lib\Doctrine\ORM\Event\ListenersInvoker.php: 102
Doctrine\vendor\doctrine\orm\lib\Doctrine\ORM\UnitOfWork.php: 1064
Doctrine\vendor\doctrine\orm\lib\Doctrine\ORM\UnitOfWork.php: 384
Doctrine\vendor\doctrine\orm\lib\Doctrine\ORM\EntityManager.php: 356
Doctrine\Entity\Accommodation.php: 1116
所以它變成了*******的行導致這個不定式的循環。我在一個交易中。我知道它不多,但可以幫助我嗎?
B是否有一些屬性是A的引用?另外,即使這肯定不是問題的原因,應儘可能地避免在循環內刷新。最後只需要一次刷新,但如果有很多條目,請查看[批處理](http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/batch -processing.html)。 – chalasr
我在交易中。通過檢查 - > getConnection() - > isTransactionActive()並丟失flush()時,它的活動似乎是好的 –
完美!這是非常具體的。 – chalasr