Сохраните несколько записей с доктриной и получая идентификатор каждой записи

0

У меня есть функция в моем приложении 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();

    }

Я хотел бы вернуть массив с сохраненными идентификаторами, а не последней сохраненной записью. Как я могу это сделать? Я был бы благодарен за помощь;) С наилучшими пожеланиями

Теги:
doctrine2

2 ответа

1
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;

}
  • 0
    Хм, но используя $ em-> flush (); для каждой записи не оптимально. Иногда может произойти сбой программы.
  • 0
    @KrzysztofMichalski Flush не должен вызывать сбой программы, если он так называется, и об этой ошибке вы должны сообщить. В любом случае я изменил ответ, чтобы обойти проблему сброса.
0

Есть только два способа сделать это: либо использовать нестрочные идентификаторы (UUID), которые вы создаете, прежде чем вставлять или извлекать последний идентификатор вставки после каждой вставки (сброс).

Установите 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);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню