ドキュメントが埋め込まれたドキュメントがあります。初めてオブジェクトを作成するとすべて正常に動作しますが、ドキュメントを更新しようとすると、埋め込まれたドキュメントが更新されません。
/** @MongoDB\Document */
class DocumentA
{
/** @MongoDB\EmbedOne(targetDocument="DocumentB") **/
protected $docB;
/** @MongoDB\String */
protected $valueA;
}
/** @MongoDB\EmbeddedDocument */
class DocumentB
{
/** @MongoDB\String */
protected $valueB;
}
私のアプリケーションでは、ドキュメントに対してクエリを実行し、値を更新してデータ ストアに永続化します。
// Variant A – Does not work
$document = ... // find from data store
$document->setValueA('Hello World');
$document->getDocB()->setValueB('foo baz');
$om->persist($document);
$om->flush();
埋め込みドキュメントを更新せずに新しいドキュメントを設定すると、すべて正常に動作します。
// Variant B - Does work
$document = ... // find from data store
$document->setValueB('Hello World 2');
$document->setDocB(new DocumentB());
$document->getDocB()->setValueB('foo baz 2');
$om->persist($document);
$om->flush();
私が言ったように、バリアント B は正常に動作します。しかし、私のアプリケーションではドキュメントがより複雑であり、埋め込みドキュメントを更新する必要があるたびに新しいオブジェクトを作成するのは現実的ではありません。Doctrine ODM に埋め込まれたドキュメントの値を調べて、更新する必要があるかどうかを判断するように指示する方法はありますか?