2017-03-22 3 views
0

イム・コーディング、/してみてください、と私はいくつかのtry/catchの状況、このような何かやりたい:データベースとYii2フレームワークとPHPでキャッチ

try { 
    save-something 
    delete-something 
} catch (Exception $e) { 
    put an error msg 
} 

PHP/Yii2は最初の要素を保存することができた場合はどうなりますが、しかし、第二を削除することはできません?操作は逆になりますか?または、1つの要素を保存し、もう1つを削除せずに取得しますか?答えが(2)の場合は、私が必要とするものを達成するための最良の方法は何ですか?トランザクション?

答えて

2

2行目が例外をスローすると、try-catchは1行目の変更をロールバックすることはありません。これを実現するための方法は、トランザクションを使用することです:

transaction = db.starttransaction() 
try { 
    transaction = db.starttransaction() 
    transaction->save-something 
    transaction->delete-something 
    transaction->commit() 
} catch (Exception $e) { 
    transation->reverse() 
} 
1

あなたは障害が発生した場合にそれを保存して削除するには、2つの方法を持っているか、ここにトランザクションを使用するために、より正確になるということは本当の例です。ときyii2上

$transaction = User::getDb()->beginTransaction(); 
try { 
     $user = new User(); 
     $user->email = '[email protected]'; 
     $user->save(); 

     $transaction->commit(); 
    } catch (\Exception $e) { 
     $transaction->rollBack(); 
    } 

Class yii\db\Transaction

関連する問題