【问题标题】:Doctrine 2 Bulk insert with relationDoctrine 2 批量插入与关系
【发布时间】:2014-03-11 17:02:11
【问题描述】:

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

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

[学说\ORM\ORMInvalidArgumentException]
通过关系发现了一个新实体 'Strego\TippBundle\Entity\Bet#betRound' 未配置为 实体的级联持久化操作:LoadTest GameGroup。至 解决这个问题:要么显式调用 EntityManager#persist() 这个未知实体或配置级联将这个关联保持在 例如@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

【问题讨论】:

    标签: symfony doctrine-orm doctrine


    【解决方案1】:

    当调用 clear 方法时,一切都被分离(Detaching entities)。 您需要重新加载每个先前加载的实体(在您的情况下为 $betRoundRef、$genuser 和可能还有 $game)。

    看看this Stack Overflow answer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-08
      • 1970-01-01
      • 2013-07-29
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多