我有一个循环遍历一些导入的产品数据,并使用 Doctrine2 将其保存到数据库中。
对于每个产品,我都会检查该 productID 是否已经存在。如果是这样,请更新它。如果没有,请创建并保留它。
我对关联实体做同样的事情,这是我遇到问题的地方,例如每个产品都与制造商相关。在每个循环中,我将检查是否存在制造商 ID,如果不存在,则创建/保留它。如果我在一次迭代中创建 ManufacturerID=3,然后我有另一个具有 ManufacturerID3 的产品,Doctrine 还不知道它,因为它还没有被刷新。
我可以通过在每个循环之后执行 flush() 来解决这个问题,而不是在循环完成时,但我想知道是否有更好的方法,也许是 Doctrine 搜索具有 ManufacturerID=3 的对象的某种方式存储库和新持久的对象?
在每个循环工作后刷新(),但这似乎不是正确的方法。
$manufacturer = $this->em
->getRepository('AMyBundle:Manufacturer')
->findOneByPosId($item->manufacturerID);
if (!$manufacturer)
{
$manufacturer = new Manufacturer();
$manufacturer->setPosId($item->manufacturerID);
$this->em->persist($manufacturer);
}