原则2批量插入与关系



我正在尝试对数据库进行一些批量插入。我读过关于它的学说方面的文章,想使用零星的flush和clear来防止高内存消耗。不幸的是,在这个过程中,所有的实体都被分离了,不仅是我插入的实体,还有与它的关系

我试着重新组合它们,或者使用参考资料。在我目前的情况下,我正在使用一个参考,但我仍然收到以下错误消息:

[条令\ORM\ORMInvalidArgumentException]
通过关系找到了一个新实体未配置为实体的级联持久化操作:LoadTest GameGroup。到解决此问题:显式调用上的EntityManager#persist()此未知实体或配置级联将此关联持久存在映射,例如@ManyToOne(..,cascade={"persistent"}).

相关编码如下:

// 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);
}

我加载此数据的整个夹具可以在这里找到:https://gist.github.com/KeKs0r/a3006768db267311bb35

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

看看这个堆栈溢出答案

相关内容

  • 没有找到相关文章

最新更新