【发布时间】:2013-09-10 08:41:51
【问题描述】:
我是 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();
【问题讨论】:
-
出于什么原因,您会将这些查询合并为一个查询?
-
我在考虑提高性能。这只是一个示例,在实践中最有可能插入大约 20 个实体。因此,仅建立连接将比 n 连接快得多。编辑:我找到了this answer 关于这个话题。
-
我可能会警告您,原则会在您执行的每个插入操作(管理状态等)上增加相当多的开销,因此对于非常大的插入,我会选择 DBAL 查询而不是 ORM 关系. // 只是我的 2 美分
标签: php mysql symfony doctrine-orm