我使用symfony2和Doctrine 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}
]
...
}
为什么引用是重复的????
答案 0 :(得分:0)
我找到了解决方案。我必须在同花顺之前清除出版物收藏。它不是最佳的,但它起作用。
在bd:
{ "_id" : 2,
...
"publications" : [{"$ref" : "Publication","$id" : 3}]
...
}
我有一个文件播客:
use Doctrine\Common\Collections\ArrayCollection;
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}]
...
}
你知道另一种方法吗????