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を自動的に登録したいと思います。
さらに、そもそもなぜこれが問題なのかを誰かが簡単に説明できますか?ハイドレーターを使用するとクエリが削除されることがわかりますが、ハイドレーターを再利用しても、新しいクエリを作成するときにこれが問題になる理由はわかりません。
ポインタをありがとう!