Doctrine odm referenceMany复制引用

时间:2014-01-29 16:08:12

标签: mongodb symfony doctrine-orm doctrine-odm

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

为什么引用是重复的????

1 个答案:

答案 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}]
...
}

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