繁体   English   中英

教义2创建多个记录

[英]Doctrine 2 creating multiple records

我试图通过Doctrine创建多个记录,但遇到一个奇怪的问题,它将成功创建第一个记录,但没有其他记录。 说我有以下内容,其中Record是一个Doctrine实体,而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();

如果我有三个记录,则第一个记录将正确创建,而其他两个记录则不能正确创建。 没有引发错误或异常,但是没有在数据库中创建记录。 如果在刷新后输出每条记录,则所有字段均已正确设置,但第一条记录后主键为null。 我以为这是一个错误准则,但我想确定在提交错误报告之前。

谢谢。

弄清楚了-答案不是如上所述将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);
 }

现在对我有用。 问题在于(我认为)实体管理器无法区分第一条记录和其余记录之间的区别,因此分离确保了在进行创建时总是有一条新记录。 另外,由于我实际上是在实际代码中使用该记录创建/修改其他记录,因此事务现在处于循环中,因此将其放入循环中对我的设置更为准确。

简而言之,在提交后在新记录上调用detach,这对我来说都是有好处的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM