Doctrine 2 Bulk insert with relation

时间:2014-02-21 10:02:01

标签: symfony doctrine-orm doctrine

我正在尝试对我的数据库进行一些批量插入。我已经在理论方面阅读了有关它的文章,并希望使用零星的刷新和清除以防止高内存消耗。不幸的是,所有实体在此过程中都会分离,不仅是我插入的实体,还包括与它的关系。

我试图重新合并它们或使用引用代替。在我目前的情况下,我正在使用引用,但仍然收到以下错误消息:

  

[学说\ ORM \ ORMInvalidArgumentException]
  通过这种关系找到了一个新实体   'Strego \ TippBundle \ Entity \ Bet #betRound'未配置为   实体的级联持久化操作:LoadTest GameGroup。至   解决此问题:显式调用EntityManager#persist()on   这个未知的实体或配置级联持久存在此关联   映射例如@ManyToOne(..,cascade = {“persist”})。

相关编码如下:

    // BetRound
    print(PHP_EOL."Search for BetROund");
    $betRounds = $em->getRepository('StregoTippBundle:BetRound')->findAll();
    print(PHP_EOL.'found Betrrounds:'.count($betRounds));
    $betRound = current($betRounds);
...
// References
        $betRoundRef = $em->getReference('Strego\\TippBundle\\Entity\\BetRound', $betRound->getId());

在这里插入:

    foreach($gameRefs as $game){
        $bet = new GameBet();
        $bet->setBetround($betRoundRef);
        $bet->setUser($genuser);
        $bet->setGame($game);
        $bet->setScoreT1($this->getScore());
        $bet->setScoreT2($this->getScore());
        $bet->recalculatePoints();
        $em->persist($bet);
    }

    if(($i % self::$batchSize) == 0){
        $em->persist($userGroup);
        $em->persist($mySelf); 
        $em->flush();
        $em->clear();  

        $em->merge($betRound);
        $em->merge($userGroup);
        $em->merge($mySelf);
    }

我可以在此处找到用于加载此数据的整个Fixture:https://gist.github.com/KeKs0r/a3006768db267311bb35

1 个答案:

答案 0 :(得分:1)

调用clear方法时,所有内容都被分离(Detaching entities)。 你需要重新加载每个先前加载的实体(在你的情况下是$ betRoundRef,$ genuser,也可能是$ game)。

查看this Stack Overflow answer

相关问题