我们最近在一个项目中用CSV数据做了一点。这是相当无痛的。有一个symfony插件tmCsvPlugin,但我们扩展了这一点,因为插件回购的版本已经过时了。必须添加到列表@TODO :)
问题1:
我不明确知道的表现,但我猜想,将记录到Doctrine_Collection,然后调用Doctrine_Collection ::保存()将是最新的方法。我敢肯定,如果一个异常被抛出的地方会很方便,你不得不回滚上次保存..
问题2:
如果你可以用一个行字段作为唯一indentifier ,(让我们假设一个用户名),那么你可以搜索一个现有的记录。如果你发现一个记录,并假设导入的行是一个数组,使用Doctrine_Record :: synchronizeWithArray()来更新该记录;然后将其添加到Doctrine_Collection。完成后,只需拨打Doctrine_Collection ::保存()
一个相当粗糙的“N”准备好执行:
// set up a new collection
$collection = new Doctrine_Collection('User');
// assuming $row is an associative
// array representing one imported row.
foreach ($importedRows as $row) {
// try to find an existing record
// based on a unique identifier.
$user = Doctrine_Core::getTable('User')
->findOneByUsername($row['username']);
// create a new user record if
// no existing record is found.
if (!$user instanceof User) {
$user = new User();
}
// sync record with current data.
$user->synchronizeWithArray($row);
// add to collection.
$collection->add($user);
}
// done. save collection.
$collection->save();
相当粗糙,但像这样的工作很适合我。这是假设您可以以某种方式使用导入的行数据作为唯一标识符。
注:如果您使用sf1.2 /学说1.0警惕synchronizeWithArray()的 - 如果我没有记错它没有正确实施。但它在教条1.2中工作正常。
是您对处理数据库操作(插入/更新)或服务器端代码逻辑(比较阵列)或两个问题吗? – 2010-08-31 20:08:47
两者都好。 – 2010-08-31 20:40:45
不同于我鑫卡特上的第一时刻,数据库的数量是完全使用Doctrine_Collection的fromArray()方法是相同的。无论如何要保存所有在同一请求上组合集合的数组? – 2010-08-31 21:37:51