Doctrine ODM Referencemany复制参考



我使用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}]
...
}

您知道另一种方法吗????

相关内容

  • 没有找到相关文章

最新更新