Doctrine2批量插入

Mik*_*ail 5 symfony doctrine-orm

是否可以使用单个查询向DB插入多个实体?当我使用此处的示例时,我可以在Web调试器中看到几个查询

更新时间23.08.2012

我找到了以下相关链接.我希望有人能帮助理解批处理:

  1. http://www.doctrine-project.org/blog/doctrine2-batch-processing.html
  2. doctrine2 - 如何提高冲洗效率?
  3. 原则2:批处理插入引用其他实体的实体时的奇怪行为

主要的事情:

有些人似乎想知道为什么Doctrine不使用多插入(插入(...)值(...),(...),(...),...

首先,只有mysql和更新的postgresql版本支持此语法.其次,当使用AUTO_INCREMENT或SERIAL并且ORM需要用于对象的身份管理的标识符时,没有简单的方法来获得这样的多插入中的所有生成的标识符.最后,插入性能很少是ORM的瓶颈.正常插入对于大多数情况来说足够快,如果你真的想做快速批量插入,那么多插入并不是最好的方法,即Postgres COPY或Mysql LOAD DATA INFILE要快几个数量级.

这就是为什么不值得努力实现在ORM中对mysql和postgresql执行多插入的抽象的原因.我希望能够清除一些问号.

use*_*440 0

我认为会有多个插入语句,但每个“刷新”调用只有一个对数据库的查询。

正如这里提到的 http://doctrine-orm.readthedocs.org/en/2.0.x/reference/working-with-objects.html

每个“persist”都会向当前UnitOfWork添加一个操作,然后是对EntityManager#flush()的调用,它实际上会写入数据库(将UnitOfWork的所有操作封装在单个事务中)。

但我没有检查我上面描述的行为是否是实际行为。

最好的问候,克里斯托夫