2013-04-11 5 views
0

Я не могу найти, как обновить встроенные документы с помощью Doctrine Mongo ODM в Symfony2. У меня есть класс под названием «Страница» со многими встроенными документами «Комментарии», и я хочу использовать createQueryBuilder для обновления определенного комментария. Вот простой класс, который у меня есть:Как обновить встроенный документ в MongoDB с Doctrine ODM

класс Page {

protected $id; 

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

}

Я обыскал весь интернет, но я не вижу, чтобы найти любую информацию о том, как обновить поддокументы документа с конструктором запросов Doctrine ODM. Я буду благодарен за любую информацию, поскольку я новичок как в Доктрине, так и в Монго. Простыми словами я хочу обновить конкретный комментарий на странице после поиска его по id.

Заранее благодарим за вашу помощь!

ответ

0

Если вы тусклый использовать QueryBuilder использовать этот

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

Или При создании сеттеров и добытчиками для переменной-члена 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

Вы не получите сообщение об ошибке, как 'Notice: Undefined смещение: 2 в C: \ MyProject \ поставщика \ доктриной \ MongoDB-ODM \ Lib \ Doctrine \ ODM \ MongoDB \ Persisters \ DocumentPersister.php линия 998 'при использовании этого кода? – Christian

+0

Это была ошибка в mongodb-odm, исправленная с https://github.com/doctrine/mongodb-odm/pull/661. – eymen

Смежные вопросы