【发布时间】:2013-05-22 15:42:42
【问题描述】:
我们有
foreach ($rwst as $row)
{
$loopData = XmlFunctions::getXmlAttrAsArray($row);
if (!$loopData)
{
return false;
}
$oCharacters = new XmlAccountCharacters();
$oCharacters
->setKeyID($this->keyID)
->setCharacterID($loopData['characterID'])
->setCharacterName($loopData['name'])
->setCorporationID($loopData['corporationID'])
->setCorporationName($loopData['corporationName']);
$this->sEntityManager->persist($oCharacters);
}
$this->sEntityManager->flush();
关键是我们什么时候会有 FALSE
$loopData
我们将退出当前函数。但。图像我们将在 foreach 中的第二个项目上设置错误,因此第一个实体将被持久化到 EntityNamager。我怎样才能把它弄出来?因为 next(即使在另一个服务\控制器中)->flush() 会保存它,我们不想要它。
【问题讨论】:
-
您想撤消持久调用吗?如果你真的想保存,你应该只调用persist
-
不是,你自己试试吧,正如我所说,无论从哪个控制器调用 flush() - 它都会将我们的实体插入到数据库中。
-
作为一个简单的例子,尝试在一个服务中持久化,然后在另一个服务中调用flush,将插入第一个实体中的实体
-
jeah 那是所需的行为,因此如果您在多个服务中编辑多个实体,则不必刷新和查询数据库。那有什么问题?如果您想要一个新实体并绝对将其保存到数据库中,您应该只调用persist ... .
标签: loops symfony doctrine-orm entitymanager