我有一個嵌入文檔的文檔。當我第一次創建一個對象時,一切正常,但是當我嘗試更新文檔時,嵌入的文檔不會被更新。如何在Doctrine MongoDB中更新嵌入式文檔?
/** @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查看嵌入式文檔的值以決定是否應該更新?
我有問題,用不同的嵌入式文檔替換。在我的情況DocumentB不是一個EmbeddedDocument,而是一個文檔。在這裏顯示的對象上使用detach也可以在這種情況下工作。 – Onema