我现在在一个地方,我需要在foreach循环中创建或更新实体。
所以我在做以下(短代码):
foreach ($dataset as $data) { $entity = new Entity(); // ---- Some setting operations on the entity $em->persist($entity); } $em->flush();
我期待的是,Doctrine管理实体,然后用一个语句将实体插入到表中。
但是它发生了,这个教义为每个创建的实体做了一个声明。
因为$ dataset数组可以很大(很多实体创建),我想把它包装成一个语句。
我该如何实现?
解决方法
如
greg0ire所示,此链接描述了Doctrine如何优化INSERT语句:
http://www.slideshare.net/jwage/doctrine-2-not-the-same-old-php-orm(从幻灯片#47看)。它使用事务,但不会在唯一的语句中对同一对象的INSERT进行分组。
如果您真的需要将您传递给数据库服务器的数据量一次分配,我建议您每个x语句处理EntityManager :: flush()。