7

アクティブなレコードの配列があり、この方法でループを使用してそれらのフィールドを変更したい:

$error = false;
foreach ($items as $item) {
    $item->is_paid = self::PENDING;
    $error = $error || !$item->save();
}
return $error;

私がやりたいことはis_paid、このすべてのアイテムのプロパティを変更することです。on が失敗した場合は、他をロールバックします。トランザクションを使用してこの問題を解決するにはどうすればよいですか?

4

1 に答える 1

18

ここを簡単に見てみると、yii でのトランザクション管理を見つけることができました。次のようなものがうまくいくはずです。

$transaction = Yii::app()->db->beginTransaction();
try {
    foreach ($items as $item) {
        $item->is_paid = self::PENDING;
        $item->save();
    }
    $transaction->commit();
    // actions to do on success (redirect, alert, etc.)
} catch (Exception $e) {
    $transaction->rollBack();
    // other actions to perform on fail (redirect, alert, etc.)
} 
于 2013-04-03T16:07:46.803 に答える