我是 Doctrine 的新手,对我来说仍然有一些模糊的地方。在这种情况下,我使用循环和实体管理器在数据库中插入新记录。它工作正常,但我注意到 Doctrine 按实体进行插入查询,这可能会变得非常庞大。
使用 Doctrine2 和 Symfony 2.3,我想知道我们如何设置它,以便它只进行 1 个插入查询,其中包含所有值(当然我们只讨论 1 个实体)。
我的意思是改变这个:
INSERT INTO dummy_table VALUES (x1, y1)
INSERT INTO dummy_table VALUES (x2, y2)
进入
INSERT INTO dummy_table VALUES (x1, y1), (x2, y2)
这是我的代码:
$em = $this->container->get('doctrine')->getManager();
foreach($items as $item){
$newItem = new Product($item['datas']);
$em->persist($newItem);
}
$em->flush();
原文由 Molkobain 发布,翻译遵循 CC BY-SA 4.0 许可协议
根据 这个答案,Doctrine2 不允许您将多个 INSERT 语句合并为一个:
您可以在此处阅读有关 Doctrine2 批处理的更多信息: https ://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/batch-processing.html
您可以切换到 DBAL 或通过在插入一定数量后刷新实体管理器来小批量处理数据: