2013-06-26 103 views
0

我想用克隆的Scenario對象創建Game對象。在SonataAdmin類中分配克隆對象

Create Game form: 
    Name: My game 
    Scenario: MyScenario (Combo box) 

基礎上的答案Deep clone Doctrine entity with related entities的問題,我已經實現了__clone方法。

我在GameAdmin類中使用__clone方法prePersist方法。

public function prePersist($game) 
{ 
    $user = $this->container->get('security.context')->getToken()->getUser(); 
    $game->setAuthor($user); 
    $cp = clone $game->getScenario(); //Error after add this 
    $game->setScenario($cp);   //two lines 
} 

我不知道這是在做此操作,因爲我得到MappingException一個合適的地方:

The class 'Doctrine\ORM\Persisters\ManyToManyPersister' was not found in the chain 
configured namespaces Sonata\MediaBundle\Entity, FOS\UserBundle\Entity, 
Sonata\UserBundle\Entity, Application\Sonata\MediaBundle\Entity, 
Application\Sonata\UserBundle\Entity, GM\AppBundle\Entity 

回答

1

Scenario實體我有$tasks這是ArrayCollection。我克隆了整個系列,導致了問題。張貼您的解決方案

public function __clone() 
{ 
    if($this->id) 
    { 
     $this->setId(null); 
     $ta = new ArrayCollection(); 
     foreach($this->tasks as $task) 
     { 
      $ta[] = clone $task; 
     } 
     $this->tasks = $ta; 
    } 
} 
+0

非常感謝:

環路克隆每個task解決問題!幫我出去了。 :) –