我有一个 php 对象映射到具有结构的 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
}
正如上面的注释所反映的,“节点”引用了存储在 $items 数组中的许多“节点项”,而“节点项”引用了一个“节点”。所以这些是双向引用的集合。
我的问题是如何有效地从其集合中删除一些'NodeItem'文档(基于可用ID的数组),以便删除的NodeItem文档也从'Node'中的$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' 的 $items 数组中的关联项并没有被删除。此外,注释中的 {cascade:persist} 似乎没有帮助。代码在 Symfony 2 框架中实现
一些帮助表示赞赏!