我使用symfony2和odm。
我有文档出版物。
...Publication:
fields:
id:
id: true
strategy: INCREMENT
dateDebut:
type: date
dateFin:
type: date
我有一个文档播客惠特。
...Podcast:
fields:
id:
id: true
strategy: INCREMENT
referenceMany:
publications:
targetDocument: ...Publication
cascade: all
发出此请求时:
db.Podcast.find({'_id':2})
这是结果。
{ "_id" : 2,
...
"publications" : [{"$ref" : "Publication","$id" : 3}]
...
}
当我坚持并冲洗播客时,我发出了此请求:
db.Podcast.find({'_id':2})
这是结果。
{ "_id" : 2,
...
"publications" : [
{"$ref" : "Publication","$id" : 3},
{"$ref" : "Publication","$id" : 3}
]
...
}
为什么引用重复???
我找到了解决方案。我必须在冲洗之前清理出版物集。它不是最佳的,但应该起作用。
在BD中:
{ "_id" : 2,
...
"publications" : [{"$ref" : "Publication","$id" : 3}]
...
}
我有一个文档播客:
use DoctrineCommonCollectionsArrayCollection;
class Podcast implements InterfaceMongoDocument
{
......
private $publications;
......
public function __construct()
{
$this->publications = new ArrayCollection();
}
.......
}
在服务中
public function attachPodcast($podcast)
{
....
$podcast->setPublications(new ArrayCollection($publications));
$this->getRepo()->attach($podcast);
}
在我的存储库中
public function attach(InterfaceMongoDocument $document)
{
$documentToClearCollection = clone $document;
$documentToClearCollection->getPublications()->clear();
$this->entiteManager->persist($document);
$this->entiteManager->flush();
}
和最后
{ "_id" : 2,
...
"publications" : [{"$ref" : "Publication","$id" : 3}]
...
}
您知道另一种方法吗????