문서가 임베드되어 있습니다. 처음으로 개체를 만들면 모든 것이 잘 작동하지만 문서를 업데이트하려고 할 때 포함 된 문서가 업데이트되지 않습니다.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();
I가 포함 된 문서를 업데이트하지만 새 모두를 설정하지 않은 경우
잘 작동합니다 :// 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가 아니라 오히려 Document입니다. 여기에 보여준 것과 같이 객체에 detach를 사용하면이 시나리오에서도 잘 작동합니다. – Onema