Doctrine2批量插入

时间:2012-08-22 15:10:49

标签: symfony doctrine-orm

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

2012年8月23日更新

我找到了以下相关链接。我希望有人能够理解批量处理:

  1. http://www.doctrine-project.org/blog/doctrine2-batch-processing.html
  2. doctrine2 - How to improve flush efficiency?
  3. Doctrine 2: weird behavior while batch processing inserts of entities that reference other entities
  4. 主要内容:

      

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

         

    首先,只有mysql和更新的postgresql版本支持此语法。其次,没有简单的方法来掌握所有   使用时在这样的多插入中生成的标识符   AUTO_INCREMENT或SERIAL和ORM需要标识符以进行标识   管理对象。最后,插入性能很少   ORM的瓶颈。普通插入物的速度足够快   大多数情况下,如果你真的想做快速批量插入,那么a   多插入不是最好的方式,即Postgres COPY或Mysql   LOAD DATA INFILE快几个数量级。

         

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

1 个答案:

答案 0 :(得分:0)

我认为会有几个insert语句,但每次“flush”调用只能对数据库进行一次查询。

如上所述 http://doctrine-orm.readthedocs.org/en/2.0.x/reference/working-with-objects.html

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

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

祝你好运, 克里斯托夫