1

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で可能なことですか?または、その機能を提供できるものは他にありますか?

4

1 に答える 1

2

トランザクションを使用する必要があります。例えば:

$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();
  }
}
于 2013-07-20T20:01:43.353 に答える