構造を持つmongodbドキュメント(ノードと呼ばれる)にマッピングするphpオブジェクトがあります
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」は$ items配列に格納されている多くの「NodeItems」を参照し、「NodeItems」は1つの「Node」を参照します。したがって、これらは双方向の参照コレクションです。
私の質問は、コレクションからいくつかの「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}は役に立たないようです。コードはSymfony2フレームワークに実装されています
いくつかの助けをいただければ幸いです!