2014-01-29 69 views
0

我使用symfony2和Doctrine ODM。Doctrine odm reference許多複製引用

我有一個文檔發佈。

...\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}] 
... 
} 

在i persit和沖洗播客和我發射該請求:

db.Podcast.find({'_id':2}) 

這是結果。

{ "_id" : 2, 
... 
"publications" : [ 
    {"$ref" : "Publication","$id" : 3}, 
    {"$ref" : "Publication","$id" : 3} 
] 
... 
} 

爲什麼引用是重複????

回答

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

你知不知道其他的方式來做到這一點????