У меня есть отображение объекта PHP к MongoDB документа (так называемый Node) со структуройКак удалить документ из ссылочного массива документов в доктрине ODM с MongoDB
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
class Node{
/**
* @MongoDB\Id
*/
protected $id;
/**
* @MongoDB\String
*/
protected $domain;
/**
* @MongoDB\ReferenceMany(targetDocument="NodeItem",cascade=
* {"persist"},simple="true")
*/
protected $items = array();
//getter and setters below
}
И ссылочного документа называется, NodeItem,
class NodeItem {
/**
* @MongoDB\Id
*/
protected $id;
/**
* @MongoDB\String
*/
protected $name;
/**
* @MongoDB\ReferenceOne(targetDocument="Node", cascade={"persist"},
* simple="true")
*/
protected Node;
//setter and getters
}
Как отражено на приведенных выше ссылках «Node» много «» NodeItems хранится в массиве $ пунктов и ссылки «NodeItems» один «узел» аннотации. Таким образом, это двунаправленные ссылочные коллекции.
Мой вопрос заключается в том, как эффективно удалять несколько документов «NodeItem» из его коллекции (на основе массива доступных идентификаторов), так что удаленные документы NodeItem также удаляются из ссылок массива $ items в «Узле» (каскадное удаление, я думаю, это то, о чем я прошу?).
Я написал функцию, которая имеет такой код:
$qb = $this->dm->createQueryBuilder('SomeBundleBundle:NodeItem');
/*
* deletes from NodeItem collection
*/
foreach($NodeItemsArray as $itemId){
$qb->remove()->field('id')->equals($itemId)->getQuery()->execute();
}
Но выше функция удаляет только документы из коллекции NodeItem, но связанные с ним элементы в $ пунктов массива «Node» не удаляются. Кроме того, {cascade: persist} в аннотациях, похоже, не помогает. Код реализован в системе Symfony 2
Некоторая помощь с благодарностью!