2013-04-11 123 views
0

我無法在Symfony2中找到如何使用Doctrine Mongo ODM更新嵌入文檔。我有一個叫做頁面的類,有許多嵌入文檔「評論」,我想用createQueryBuilder來更新特定的評論。下面是一個簡單的類,我有:如何使用Doctrine ODM更新MongoDB中的嵌入文檔

類頁 {

protected $id; 

/** @MongoDB\EmbedMany */ 
private $pageComment = array(); 

}

我找遍了整個互聯網,但我不認爲找到關於如何更新子文檔的任何信息具有Doctrine ODM查詢生成器的文檔。我會很感激任何信息,因爲我對Doctrine和Mongo都陌生。簡單地說,我想通過id搜索它後更新頁面中的特定評論。

在此先感謝您的幫助!

回答

0

如果婉使用QueryBuilder的使用

$dm->createQueryBuilder('Page') 
    ->update() 
    ->field('page.pageComment')->set(<$newupdatePageCommentObj>) 
    ->field('id')->equals('<matchedId>') 
    ->getQuery() 
    ->execute(); 

,或者當您生成getter和setter方法的EmbedMany成員變量就會產生添加和刪除成員函數的類中。所以在你的情況下,這些將是成員函數:

public function addPageComment(type_hint_with_your_pageComment_document $pageComment) 
{ 
    $this->pageComment[] = $pageComment; 
} 
public function removePageComment(type_hint_with_your_pageComment_document $pageComment) 
{ 
    $this->items->removeElement($pageComment); 
} 

所以,你可以使用addPageComment()函數,如果不存在,這將增加,並會更新,將把其已經存在。

0
$yourArrayPageComment = array(
    "id" => new \MongoId($pageCommentId), 
    "field1" => $field1, 
    ... 
) 

$this->createQueryBuilder('page') 
      ->update() 
      ->field('id')->equals($pageId) 
      ->field('pageComment.id')->equals($pageCommentId) 
      ->field("pageComment.$")->set($yourArrayPageComment) 
      ->getQuery() 
      ->execute(); 
+0

你沒收到這樣的錯誤'注意事項:未定義抵消:2在C:\ MyProject的\供應商\原則\ MongoDB的-ODM \ LIB \原則\ ODM \ MongoDB的\,持久\ DocumentPersister.php線998 '使用此代碼時? – Christian 2013-07-26 16:20:42

+0

這是一個在mongodb-odm中的錯誤,從https://github.com/doctrine/mongodb-odm/pull/661修復。 – eymen 2013-10-31 06:05:39

相關問題