ホームページ  >  に質問  >  本文

オーバーライドを実行するときにフィールドと条件を検証する方法

中央サーバーと、d1、d2、d3、d4、d5 などのいくつかの地域サーバーがあります。

コピーするテーブルがいくつかあります。話を簡単にするために、d1、d2、d3、d4、d5、および c に存在し、これらすべてのサーバーで同じ構造を持つ tblFoo というテーブルがあると仮定します。ルールは簡単です:

目標は、d サーバー上の tblFoo に変更 (挿入、更新、削除) が行われた場合、c サーバーでも即座に変更されるようにすることです。これは挿入操作に最適です (pkFooID である ID には定義により auto_increment 属性があるため)。これは更新および削除操作にも機能しますが、これらの操作にはいくつかの懸念があります。コードは次のとおりです (簡易バージョン):

リーリー

問題は: d1でupdateまたはdeleteステートメントを実行し、その条件が他のリージョンサーバー(d2、d3、d4、d5)で満たされる場合、正しく実行されます。 d1 では update ステートメントと delete ステートメントを実行しますが、同じステートメントが d1 で実行されると、c サーバーの他のリージョンのレコードを誤って更新/削除する可能性があります。

この問題を解決するには、ステートメントを検証し、次の条件のいずれかが満たされない場合に例外をスローすることをお勧めします。

レプリケーション動作のないテーブルは通常どおり実行されます。上記の制限は、この例の tblFoo など、レプリケーション動作のあるテーブルにのみ適用されます。

###質問###

主キーまたは外部キーのみを検索し、= または IN 演算子のみを使用できるように、リライト実行で更新/削除クエリを検証するにはどうすればよいですか?

P粉448346289P粉448346289283日前385

全員に返信(1)返信します

  • P粉333186285

    P粉3331862852024-01-11 13:56:49

    これが私が問題を解決した方法です。

    コピー動作を持つモデルは次の検証を実行します:

    リーリー

    Query クラスには、必要な検証をトリガーする isReplicate メソッドがあり、条件が確実に満たされるように where メソッドがオーバーライドされています。正しく検証されました :

    リーリー

    返事
    0
  • キャンセル返事