Следующий ответ не мой, а ОП, который был размещен в вопросе. Я переместил его в этот вики-ответ сообщества.
Я сохранил ссылку на объект Connection и использовал ее для ручной вставки строк и обновления отношений. Это позволяет избежать генерации персистентности и идентичности. Также возможно использовать Соединение, чтобы обернуть всю эту работу в транзакцию.
После выполнения операторов вставки вы можете обновить отношения.
Это хорошее решение, поскольку оно позволяет избежать любых потенциальных проблем, которые могут возникнуть при замене конфигурации на работающем сервере.
В вашей функции инициализации:
// Get the Connection
$this->connection = $this->getContainer()->get('doctrine')->getEntityManager()->getConnection();
В вашем основном теле:
// Loop over my array of old data adding records
$this->connection->beginTransaction();
foreach(array_slice($records, 1) as $record)
{
$this->addRecord($records[0], $record);
}
try
{
$this->connection->commit();
}
catch(Exception $e)
{
$output->writeln($e->getMessage());
$this->connection->rollBack();
exit(1);
}
Создать эту функцию:
// Add a record to the database using Connection
protected function addRecord($columns, $oldRecord)
{
// Insert data into Record table
$record = array();
foreach($columns as $key => $column)
{
$record[$column] = $oldRecord[$key];
}
$record['id'] = $record['rkey'];
// Insert the data
$this->connection->insert('Record', $record);
}