恢复php中的对象属性更改

时间:2013-07-20 05:16:58

标签: php doctrine symfony-1.4

我有一堆Doctrine php对象,我正在调用像

这样的东西
$myObj = $query->execute()->getFirst();
$myObj->setName('a new name');
$myObj->setAge('40');
$myObj->save();

...等 等...

在某些时候,如果遇到错误,我想恢复所有这些属性更改,因为我已经调用了save()函数并将新属性传播到数据库。

我想提出一种方法来存储对象的旧值以及调用哪个方法来还原它。类似的东西:

$undoCollection = array();
$undoObject = array();
$undoObject['revertFunction'] = $myObj->setName;
$undoObject['revertValue'] = 18;
array_push($undoCollection,$undoObject)

所以稍后,如果出现问题,我可以遍历$ undoCollection:

foreach($undoCollection as $undoObj)
{
    $undoObj['revertFunction']($undoObj['revertValue']);
}

这是否可以在PHP中使用?或者还有其他可以提供该功能的东西吗?

1 个答案:

答案 0 :(得分:2)

您应该使用transactions。 E.g:

$myObj = $query->fetchOne();

if ($myObj)
{
  $conn = $myObj->getTable()->getConnection();

  try
  {
    $conn->beginTransaction();

    $myObj->setName('Asd')->save();

    // do other stuff...

    // if an exception is thrown before calling commit
    // nothing in this try block will be saved 
    $conn->commit();
  }
  catch(Exception $e)
  {
    $conn->rollback();
  }
}