2013-04-11 120 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

相关问题