以下答案不是我的,而是OP的,它是在問題中發佈的。我已將其移入此社區wiki答案。
我存儲到連接對象的引用和用於該手動插入行和更新的關係。這完全避免了持久性和身份生成器。也可以使用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);
}
感謝這個提示。我一直在這樣做,但我不確定它是否理想。我想我最終可能會執行原始DQL查詢。 –
請參閱上面的解決方案。我使用Connection對象作爲一個愉快的PDO接口。 –
如何(暫時)禁用ID生成器策略:http://www.ens.ro/2012/07/03/symfony2-doctrine-force-entity-id-on-persist/ – aimfeld