Doctrine 2创建多个记录

时间:2013-07-01 16:13:17

标签: php mysql doctrine

我正在尝试通过Doctrine创建多个记录,我遇到了一个奇怪的问题,它将成功创建第一个记录,但没有其他记录。假设我有以下内容,其中Record是一个Doctrine Entity,而record_id是主键:

 $entityManager->getConnection()->beginTransaction();

 foreach($recordsToCreate as $data)
 {
   $record = new Record();
   $record->field1 = $data['field1'];
   $record->field2 = $data['field2'];

   $entityManager->persist($record);
   $entityManager->flush();
 }

 $entityManager->getConnection()->commit();

如果我有三条记录,第一条记录将正确创建,而不是其他两条记录。不会抛出任何错误或异常,但不会在数据库中创建记录。如果我在刷新后输出每个记录,则所有字段都设置正确但主键在第一个记录后为空。我认为这是一个学说故障,但我想在提交错误报告之前确定。

感谢。

1 个答案:

答案 0 :(得分:0)

想出来 - 答案是没有将flush()放在循环之外,如上所述。解决方案是在提交事务后使用detach()。所以:

 foreach($recordsToCreate as $data)
 {
   $entityManager->getConnection()->beginTransaction();
   $record = new Record();
   $record->field1 = $data['field1'];
   $record->field2 = $data['field2'];

   $entityManager->persist($record);
   $entityManager->flush();

   $entityManager->getConnection()->commit();
   $entityManager->detach($record);
 }

现在对我有用。问题是,不知何故(我认为)实体经理无法区分第一个记录和其他记录之间的区别,因此分离确保它在创建时始终有新记录。此外,事务现在处于循环中,因为我实际上是在实际代码中使用这个记录创建/修改其他记录,因此将它放在循环中对我的设置更准确。

所以简而言之,在提交后调用新记录中的分离,这对我都有好处。