我有一个实现 postLoad 生命周期事件方法的实体。此方法有条件地更新实体并尝试保存它。类似于以下内容:
/**
* @PostLoad
*/
public function checkExpiryDate()
{
$currentDate = new App_Date();
// Check the expiry date here
if($currentDate->getTimestamp() > $this->getDateExpired()->getTimestamp()) {
$this->Status = "expired";
$this->ServiceLayer->saveEntity($this);
}
}
但是,我收到以下错误:
Call to a member function fetch() on a non-object in Doctrine/ORM/Internal/Hydration/ObjectHydrator.php on line 149
看来我无法在 postLoad 期间保存实体。
我偶然发现了这张票,它建议在新密钥下注册 ObjectHydrator 并在任何新查询期间指定水合器。
但是,我想知道是否有一种在更抽象的层次上实现它的好方法;每当在 postLoad 调度期间构建查询时,我想自动注册一个新的 ObjectHydrator。
此外,有人可以首先简要解释为什么这是一个问题吗?从我可以看到,一旦使用了水合器,查询就会被删除,但我不明白为什么在构建新查询时这会成为问题,即使水合器被重用。
感谢您的任何指点!