From ea6139f111e42357d6e570a4f6b0c14d00277131 Mon Sep 17 00:00:00 2001 From: Nobuo Kihara Date: Mon, 14 May 2018 14:22:27 +0900 Subject: [PATCH] guide-ja/db-active-record.md updated [ci skip] --- docs/guide-ja/db-active-record.md | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/docs/guide-ja/db-active-record.md b/docs/guide-ja/db-active-record.md index 5240947..287ebd5 100644 --- a/docs/guide-ja/db-active-record.md +++ b/docs/guide-ja/db-active-record.md @@ -742,10 +742,11 @@ class Post extends \yii\db\ActiveRecord 1. アクティブ・レコード・クラスと関連付けられている DB テーブルに、各行のバージョン番号を保存するカラムを作成します。 カラムは長倍精度整数 (big integer) タイプでなければなりません (MySQL では `BIGINT DEFAULT 0` です)。 -2. [[yii\db\ActiveRecord::optimisticLock()]] メソッドをオーバーライドして、このカラムの名前を返すようにします。 -3. ユーザ入力を収集するウェブフォームに、更新されるレコードの現在のバージョン番号を保持する隠しフィールドを追加します。 - バージョン属性が入力の検証規則を持っており、検証が成功することを確かめてください。 -4. アクティブ・レコードを使って行の更新を行うコントローラ・アクションにおいて、[[\yii\db\StaleObjectException]] 例外を捕捉して、 +2. [[yii\db\ActiveRecord::optimisticLock()]] メソッドをオーバーライドして、このカラムの名前を返すようにします。 +3. あなたのモデル・クラスの中で [[\yii\behaviors\OptimisticLockBehavior|OptimisticLockBehavior]] を実装し、受診したリクエストからその値を自動的に解析できるようにします。 +4. ユーザ入力を収集するウェブフォームに、更新されるレコードの現在のバージョン番号を保持する隠しフィールドを追加します。 + [[\yii\behaviors\OptimisticLockBehavior|OptimisticLockBehavior]] が検証を処理すべきですので、バージョンの属性は検証規則から削除します。 +5. アクティブ・レコードを使って行の更新を行うコントローラ・アクションにおいて、[[\yii\db\StaleObjectException]] 例外を捕捉して、 衝突を解決するために必要なビジネス・ロジック (例えば、変更をマージしたり、データの陳腐化を知らせたり) を実装します。 例えば、バージョン番号のカラムが `version` と名付けられているとすると、 @@ -780,6 +781,17 @@ public function actionUpdate($id) // 衝突を解決するロジック } } + +// ------ モデルのコード ------- + +use yii\behaviors\OptimisticLockBehavior; + +public function behaviors() +{ + return [ + OptimisticLockBehavior::className(), + ]; +} ```