Symfony 条令保存已更改但未保留的实体
我有一个RESTAPI,它接受大量实体集合,然后逐个验证它们,以便只保存有效的实体,而忽略无效的实体。我试图通过以下方式实现这一目标:Symfony 条令保存已更改但未保留的实体,symfony,doctrine-orm,Symfony,Doctrine Orm,我有一个RESTAPI,它接受大量实体集合,然后逐个验证它们,以便只保存有效的实体,而忽略无效的实体。我试图通过以下方式实现这一目标: foreach($bets['bets'] as $bet){ $bet['betRound'] = $betRound->getId(); $bet['user'] = $this->getUser()->getId(); $betObj = $this->getBetForGame($bet['game']);
foreach($bets['bets'] as $bet){
$bet['betRound'] = $betRound->getId();
$bet['user'] = $this->getUser()->getId();
$betObj = $this->getBetForGame($bet['game']);
$singleForm = $this->formFactory->create('bet', $betObj);
$singleForm->submit($bet);
if($singleForm->isValid()){
$em->persist($betObj)
}
}
$em->flush();
这将检查每个实体,并仅在其有效时将其持久化。不知何故,当我提交12个有效实体和4个无效实体时,flush仍在提交所有16个实体,并更改数据库值,即使是无效的实体。
有人知道为什么吗?flush方法将工作单元中的每个更改与数据库同步。尝试仅单独刷新有效的:
foreach($bets['bets'] as $bet){
$bet['betRound'] = $betRound->getId();
$bet['user'] = $this->getUser()->getId();
$betObj = $this->getBetForGame($bet['game']);
$singleForm = $this->formFactory->create('bet', $betObj);
$singleForm->submit($bet);
if($singleForm->isValid()){
$em->persist($betObj);
$em->flush($betObj);
}
}
我不知道是不是打字错误,但你忘了一个;在这里:
使用$em->refresh将所有无效赌注恢复到原始状态 更新:如果已在管理赌注对象,则无需对其调用persist
foreach($bets['bets'] as $bet){
$bet['betRound'] = $betRound->getId();
...
// Basically reloads invalid objects
if(!$singleForm->isValid()) $em->refresh($betObj);
}
$em->flush();
我构建了一个与此非常类似的解决方案,但不是刷新实体,而是分离实体。我不确定这是否对我的情况有很大影响。我想看看哪种方法更快会很有趣。这是我最初的想法,但出于性能原因,我不喜欢多次刷新。
foreach($bets['bets'] as $bet){
$bet['betRound'] = $betRound->getId();
...
// Basically reloads invalid objects
if(!$singleForm->isValid()) $em->refresh($betObj);
}
$em->flush();