Php Doctrine2和执行迭代时的后加载事件的危险
在Doctrine2关于事件的文档中,它说:Php Doctrine2和执行迭代时的后加载事件的危险,php,doctrine-orm,Php,Doctrine Orm,在Doctrine2关于事件的文档中,它说: 请注意,在使用Doctrine\ORM\AbstractQuery#iterate()时,对象水合后会立即执行加载后事件,因此关联不能保证初始化。将Doctrine\ORM\AbstractQuery\iterate()和postLoad事件处理程序结合使用是不安全的。 为什么不安全 迭代器基本上是在迭代器的基础上对行进行水合物化,所以我没有得到区别 抽象查询: 在迭代中: $this->\u em->newHydrator($this->\u hy
请注意,在使用Doctrine\ORM\AbstractQuery#iterate()时,对象水合后会立即执行加载后事件,因此关联不能保证初始化。将Doctrine\ORM\AbstractQuery\iterate()和postLoad事件处理程序结合使用是不安全的。
为什么不安全
迭代器基本上是在迭代器的基础上对行进行水合物化,所以我没有得到区别
抽象查询:
在迭代中:
$this->\u em->newHydrator($this->\u hydrationMode)->迭代($stmt,$rsm,$this->\u提示)代码>
在执行中:
$this->\u em->newHydrator($this->\u hydrationMode)->hydrateAll($stmt,$rsm,$this->\u提示)代码>
hydrateAllData调用HYDRATEAROWDATA但生成快照:
while ($row = $this->_stmt->fetch(PDO::FETCH_ASSOC)) {
$this->hydrateRowData($row, $result);
}
// Take snapshots from all newly initialized collections
foreach ($this->initializedCollections as $coll) {
$coll->takeSnapshot();
}
与单纯的水化物相比
是关于那些快照吗