Php 使用条令保存多个记录并获取每个记录的id

Php 使用条令保存多个记录并获取每个记录的id,php,mysql,symfony,doctrine-orm,Php,Mysql,Symfony,Doctrine Orm,我的php应用程序中有一个将数据保存在表中的函数: public function saveAdditionalDataForRecord($header, $data, $record) { $em = $this->getEntityManager(); foreach ($header as $key => $value) { $clientRecordAdditionalData = new ClientRec

我的php应用程序中有一个将数据保存在表中的函数:

public function saveAdditionalDataForRecord($header, $data, $record)
    {
        $em = $this->getEntityManager();
        foreach ($header as $key => $value) {
            $clientRecordAdditionalData  = new ClientRecordAdditionalData();
            $clientRecordAdditionalData->setName($value);
            $clientRecordAdditionalData->setValue($data[$key]);
            $clientRecordAdditionalData->setRecord($record);
            $em->persist($clientRecordAdditionalData);
        }
        $em->flush();
        return $clientRecordAdditionalData->getId();

    }
我想返回id为saved records的数组,而不是上次保存的记录。我该怎么做?我将非常感谢你的帮助;)
最好的问候

只有两种方法可以做到这一点:要么使用插入前生成的非亮片id(UUID),要么在每次插入(刷新)后检索最后一个插入id

public function saveAdditionalDataForRecord($header, $data, $record)
{
    $em = $this->getEntityManager();

    $ids = array();
    $objects = array();

    foreach ($header as $key => $value) {
        $clientRecordAdditionalData  = new ClientRecordAdditionalData();
        $clientRecordAdditionalData->setName($value);
        $clientRecordAdditionalData->setValue($data[$key]);
        $clientRecordAdditionalData->setRecord($record);
        $em->persist($clientRecordAdditionalData);

        $objects[] = $clientRecordAdditionalData;
    }

    $em->flush();

    foreach($objects as $object)
    {
        $ids[] = $object->id;
    }

    return $ids;

}
安装
ramsey/uuid
以生成uuid

foreach ($header as $key => $value) {
    $clientRecordAdditionalData  = new ClientRecordAdditionalData();
    $clientRecordAdditionalData->setId(Uuid::uuid4());
    $clientRecordAdditionalData->setName($value);
    $clientRecordAdditionalData->setValue($data[$key]);
    $clientRecordAdditionalData->setRecord($record);
    $em->persist($clientRecordAdditionalData);
}

嗯,但是使用$em->flush();并不是每一项记录都是最优的。有时程序可能会崩溃。@KrzysztofMichalski Flush不应该导致程序崩溃,如果它是这样调用的,您应该报告这个bug。无论如何,我已经修改了答案,以解决同花顺问题。