php - Doctrine 2 创建多个记录

标签 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();

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

谢谢。

最佳答案

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

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

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

关于php - Doctrine 2 创建多个记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17409046/

相关文章:

php - 更改sentry 2用户迁移表的主键

PHP 使用 DOM 解析器获取自定义属性值

mysql - 将两个SQL结果组合成一行不同列名的结果集

python - 模型中的额外 ID

postgresql - 当生成器策略设置为 IDENTITY 时无法设置 sequenceGenerator

php - Doctrine 2 - 加入的实体仍然是代理并在请求后生成两个查询

php - 获取 Laravel 中两个数组之间的差异

php - 如何在选择 onChange 事件时重定向到其他方式?

php - 显示文本和/或图像而不是数据库结果

symfony - Doctrine 查询生成器,其中 ManyToMany 的计数大于