EntityManager由于独特的侵犯而被关闭



我使用symfony3,我的费率表中有一个独特的约束。

因此,当我尝试两次运行此脚本时,第二次运行当然会得到一个例外。但是之后,我关闭了EntityManager。

我如何在不手动检查表是否已经包含此类行的情况下处理此操作:

$rate = new Rate;
$rate->setCreatedAt($date);
$rate->setValue($rateValue);
try {
    $this->getEntityManager()->persist($rate);
    $this->getEntityManager()->flush();
} catch (UniqueConstraintViolationException $e) {
    var_dump($this->getEntityManager()->isOpen()); // false
}

您可以事先检查现有实体:

$existingRate = $this->getEntityManager()
                     ->getRepository(Rate::class)
                     ->findOneBy... // use what method suits you
if(!$existingRate) {
    $rate = new Rate;
    $rate->setCreatedAt($date);
    $rate->setValue($rateValue);
    // insert only if not found
    $this->getEntityManager()->persist($rate);
} else {
    // update if found
    $existingRate->setValue($rateValue);
}
// you may wrap this in a try-catch to prevent other errors
$this->getEntityManager()->flush();

另一个选择是重建/重置Entity Manager

if ($this->getEntityManager()->isOpen() === false) {
    // reset or generate a new entity manager
}

您可以重置您的Entity Manager

$this->getDoctrine()->resetManager()

来自文档:

关闭对象管理器时,此方法很有用,因为 回滚交易,当您认为这是有意义的 获取一个新的代替封闭的。

但是,最好在执行之前检查您的交易是否会失败。

相关内容

  • 没有找到相关文章

最新更新