我们有
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();
重点是当我们在
上有假$loopData
我们将从当前功能退出。但。我们将在foreach中的第二个项目上显示false,因此第一个Entity将持久保存到EntityNamager。我怎么能把它拿出来?因为接下来(即使在另一个服务\控制器中) - > flush()将保存它,我们不希望它。
答案 0 :(得分:0)
您正在寻找的是明确的交易。看看Doctrine-documentation。基本上你的代码应该是这样的:
$this->sEntityManager->getConnection()->beginTransaction();
try {
foreach ($rwst as $row) {
$loopData = XmlFunctions::getXmlAttrAsArray($row);
if (!$loopData) {
throw new SomeException();
}
\\ the rest of your code
$this->sEntityManager->persist($oCharacters);
}
$this->sEntityManager->flush();
$this->sEntityManager->getConnection()->commit();
return true;
} catch (SomeException $e) {
$this->sEntityManager->getConnection()->rollback();
$this->sEntityManager->close();
}
return false;
答案 1 :(得分:0)
总是如我所能想象的那么简单。 = \
if(!$loopData)
{
$this->sEntityManager->clear()
return false;
}
所有持久化的实体都会脱离教条,因此不会插入\更新。 或单个实体
$this->sEntityManager->detach($entity);
http://doctrine-orm.readthedocs.org/en/2.0.x/reference/batch-processing.html