Php 在SonataAdmin类中分配克隆对象

Php 在SonataAdmin类中分配克隆对象,php,symfony,doctrine-orm,sonata-admin,Php,Symfony,Doctrine Orm,Sonata Admin,我想用克隆的场景对象创建游戏对象 Create Game form: Name: My game Scenario: MyScenario (Combo box) 根据对问题的回答,我已经实现了\u clone方法 我在GameAdmin类的prePersist方法中使用\u clone方法 public function prePersist($game) { $user = $this->container->get('security.context'

我想用克隆的场景对象创建游戏对象

Create Game form:
    Name: My game
    Scenario: MyScenario (Combo box)
根据对问题的回答,我已经实现了
\u clone
方法

我在
GameAdmin
类的
prePersist
方法中使用
\u clone
方法

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

场景
实体中,我有
$tasks
,它是
数组集合
。我克隆了整个收藏,这会引起问题

在循环中克隆每个
任务
可以解决问题:

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

非常感谢您发布您的解决方案!帮了我一把。:)