我有一个包含另一个文档的文档。当我第一次创建对象时,一切正常,但是当我尝试更新文档时,嵌入的文档没有被更新。
/** @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查看嵌入式文档的值以决定是否应该更新它?