You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Doctrine保存多条记录并获取每条记录的ID数组

修改函数返回所有保存记录的ID数组

没问题,这个修改很容易实现,核心思路就是在循环中保存每个创建的实体引用,等flush完成后再提取所有实体的ID。以下是修改后的完整代码:

public function saveAdditionalDataForRecord($header, $data, $record) { 
    $em = $this->getEntityManager(); 
    $savedEntities = []; // 存储所有新建的实体实例
    foreach ($header as $key => $value) { 
        $clientRecordAdditionalData = new ClientRecordAdditionalData(); 
        $clientRecordAdditionalData->setName($value); 
        $clientRecordAdditionalData->setValue($data[$key]); 
        $clientRecordAdditionalData->setRecord($record); 
        $em->persist($clientRecordAdditionalData); 
        $savedEntities[] = $clientRecordAdditionalData; // 将当前实体加入数组
    } 
    $em->flush(); // 执行数据库写入,此时所有实体都会获得ID
    
    // 提取所有实体的ID组成数组
    $savedIds = array_map(function($entity) {
        return $entity->getId();
    }, $savedEntities);
    
    return $savedIds; 
}

关键修改点说明:

  • 新增了$savedEntities数组,用来保留循环中创建的每一个ClientRecordAdditionalData对象,避免像原来那样每次循环覆盖掉之前的实体引用。
  • 执行flush()之后,Doctrine会完成所有新实体的数据库插入操作,并且会为自增类型的ID字段赋值,此时调用getId()就能获取到有效的记录ID了。
  • 如果觉得array_map不够直观,也可以用普通的foreach循环来提取ID:
    $savedIds = [];
    foreach ($savedEntities as $entity) {
        $savedIds[] = $entity->getId();
    }
    

这样修改后,函数就会返回所有成功保存的记录ID组成的数组了。

内容的提问来源于stack exchange,提问作者Krzysztof Michalski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:22:39