yiiは、トランザクション
オブジェクトを使用してデータベーストランザクションを実装する簡単な方法を提供します。このオブジェクトはトランザクションライフサイクルを管理し、Atomicityを確保します。トランザクション内のすべての操作は完全に成功するか、完全に失敗し、データベースを一貫した状態にします。最も一般的なアプローチは、 dbtransaction
オブジェクト内で try-catch
ブロックを使用することです。これができる方法は次のとおりです。 $ transaction = yii :: $ app-> db-> begintransaction(); {//データベース操作はこちらをお試しください。例:$ user = new user(); $ user-> username = 'testuser'; $ user-> email = 'test@example.com'; $ user-> save(); $ profile = new Profile(); $ profile-> user_id = $ user-> id; $プロファイル - > bio = 'これはテストプロファイルです。'; $ profile-> save(); $ transaction-> commit(); } catch(\ exception $ e){$ transaction-> rollback(); //例外を適切に処理します。たとえば、エラーをログにし、ユーザーフレンドリーなメッセージを表示します。 yii :: error($ e、__method__); $ eを投げます。 //必要に応じて、高レベルの取り扱いの例外を再スローします。 }
このコードは最初にトランザクションを開始します。すべての save()
操作が成功した場合、 $ transaction-> commit()
が呼び出され、変更を永続的に保存します。操作が例外をスローする場合、 $ transaction-> rollback()
が呼び出され、トランザクション内で行われたすべての変更を返し、データの整合性を維持します。エラー処理が重要です。 catch
ブロックは、エラーが発生したとしても、データベースが一貫していることを保証します。データベースは長期間ロックされ、同時性に影響を与える可能性があります。単一のトランザクション内の原子操作を目指します。
try-catch
ブロックでトランザクションコードをラップします。デバッグと監視のためのログの例外。特定のシナリオのカスタム例外処理を検討して、ユーザーに有益なエラーメッセージを提供します。 catch
a try-catch
ステートメントのブロック。トランザクション中に例外がスローされた場合、 $ transaction-> rollback()
が自動的に呼び出され、トランザクション内で行われた変更が元に戻されます。データの一貫性を保証するために、例外処理メカニズムに常にこのロールバックが含まれるようにすることが重要です。 code-> rollback>
ブロック内で $ transaction-> rollback()
ブロックを呼び出す以外には、明示的なロールバックは必要ありません。これらのレベルは、 dbtransaction
オブジェクトの IsolationLevel
プロパティを使用して設定されます。一般的なレベルには以下が含まれます。これにより、汚い読み取り(変更されているがまだコミットされていないデータの読み取り)につながる可能性があります。
分離レベルの選択は、アプリケーションの要件に依存します。データの一貫性が最重要であり、並行性がそれほど重要ではない場合、 serializable
が適切かもしれません。ほとんどのアプリケーションでは、 committed
を読み取りますは、一貫性とパフォーマンスのバランスをとることができます。トランザクションを開始するときに分離レベルを指定できます。
<code class="php"> $ transaction = yii :: $ app-&gt; db-&gt; begintransaction(transaction :: serializable); // //デフォルトレベルは通常、多くのアプリケーションに十分な分離を提供します。</code>
以上がYIIでデータベーストランザクションを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。