【发布时间】: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