Tôi có tài liệu có tài liệu được nhúng. Khi tôi tạo một đối tượng cho lần đầu tiên mọi thứ hoạt động tốt, nhưng khi tôi cố cập nhật tài liệu, tài liệu được nhúng không được cập nhật.Làm cách nào để cập nhật các tài liệu nhúng trong Doctrine MongoDB?
/** @MongoDB\Document */
class DocumentA
{
/** @MongoDB\EmbedOne(targetDocument="DocumentB") **/
protected $docB;
/** @MongoDB\String */
protected $valueA;
}
/** @MongoDB\EmbeddedDocument */
class DocumentB
{
/** @MongoDB\String */
protected $valueB;
}
Trong ứng dụng của tôi, tôi truy vấn tài liệu, cập nhật giá trị và lưu giữ chúng vào kho dữ liệu.
// Variant A – Does not work
$document = ... // find from data store
$document->setValueA('Hello World');
$document->getDocB()->setValueB('foo baz');
$om->persist($document);
$om->flush();
Nếu tôi không cập nhật các tài liệu nhúng, nhưng thiết lập một tất cả mọi thứ mới hoạt động tốt:
// 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();
Như tôi đã nói, biến thể B hoạt động tốt. Tuy nhiên, trong ứng dụng của tôi các tài liệu phức tạp hơn và tôi sẽ không thực tế khi tạo một đối tượng mới cho tài liệu được nhúng mỗi lần tôi phải cập nhật nó. Có một phương pháp để nói với Doctrine ODM để xem xét các giá trị của một tài liệu nhúng để quyết định xem nó có nên được cập nhật không?
Tôi đang gặp sự cố khi thay thế tài liệu được nhúng bằng tài liệu khác. Trong trường hợp của tôi DocumentB không phải là một EmbeddedDocument mà là một tài liệu. Sử dụng tách trên đối tượng như bạn đã cho thấy ở đây cũng làm việc trong kịch bản này. – Onema