我使用symfony1.4和Doctrine在事务中保存记录。
插入的行来自CSV文件,该文件会定期更新。我已经有一个方法可以检查CSV中的记录是否与DB中的记录匹配,但是不插入。
我理想的做法是设置用户闪存,告诉他们导入CSV文件时已经更新了多少行。
$conn = ProductTable::getInstance()->getConnection();
$conn->beginTransaction();
try {
$row = 1;
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
if ($row > 1) {
$values = array(
'blah' => null
);
$obj= ProductTable::getInstance()->findOrCreateNewProduct(
$values['blah']
);
$obj->merge($values);
$obj->save($conn);
}
$row++;
}
$conn->commit();
} catch (Doctrine_Exception $e) {
$conn->rollback();
throw $e;
}
我想知道我如何获得这些更新的字段。是在actions.class.php
还是在实际的form.class.php
文件中?
由于
答案 0 :(得分:1)
在你可以调用一个Doctrine_Record::getModified()
,它将为你提供一系列修改过的字段(尽管这些字段对你来说无关紧要)。然后,您可以在返回的数组上调用count,并在循环外保留累计总数。
$conn = ProductTable::getInstance()->getConnection();
$conn->beginTransaction();
$nbModified = 0;
try {
$row = 1;
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
if ($row > 1) {
$values = array(
'blah' => null
);
$obj= ProductTable::getInstance()->findOrCreateNewProduct(
$values['blah']
);
$obj->merge($values);
$nbModified += count($obj->getModified());
$obj->save($conn);
}
$row++;
}
$conn->commit();
// return $nbModified or otherwise do something with it here
} catch (Doctrine_Exception $e) {
$conn->rollback();
// youre rolling back so just for consistency set $nbModified to zero
$nbModified = 0;
throw $e;
}