我有一个循环遍历一些导入的Product数据,并使用Doctrine2将其持久化到数据库 .
对于每个产品,我检查是否已存在该productID . 如果是这样,请更新它 . 如果没有,请创建并坚持下去 .
我对相关实体也这样做,这是我遇到问题的地方,例如每个产品都与制造商有关 . 在每个循环中,我将检查是否存在ManufacturerID,如果不存在则创建/持久化 . 如果我在一次迭代中创建了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);
}
2 回答
你知道他们说了什么:“早期优化是所有邪恶的根源”D. Knuth
检查这个简单的优化,如果你需要更好的时间,然后拉起你的袖子然后往下走,否则继续前进 .
我添加了一个小测试基准,记得用空数据库检查两个变种 .