1

AとBの2つのクラスがあり、それぞれがデータベースからテーブルをマッピングしています。AとBは、主キー列と2番目のテーブルの別の列の間に関係があります。1つの関数で両方のテーブルを挿入/更新したいのですが、それを行うための最良の方法がわかりません。

Googleでいくつかの解決策を見つけましたが、それが最善の方法かどうかはわかりません。私は何をすべきか?私の考えは、AとBのsaveメソッドを呼び出すようなsave()メソッドを用意することです。これが最良の選択である場合、CFormModelまたはCActiveRecordのどちらを拡張する必要がありますか?CFormModelを拡張しようとすると、ドキュメントに従うことで、save()またはinsert()またはなどのメソッドを使用するのは正しくありませんupdate()。ドキュメントによると、CFormModelは、保存されないデータを保存するためにのみ使用されます。CActiveRecordを拡張すると、save()メソッドにアクセスできますが、何もマップしません。ドキュメントによると、CActiveRecordはデータベースからテーブルをマップする必要があります。

それで、これを行うための最良の方法は何ですか?

4

2 に答える 2

1

gii 生成ツールから生成された yii のデフォルト フォルダ構造がある場合、コンポーネント フォルダでコントローラ ファイルを使用し、そこに保存メソッドを追加して、必要な CActiveRecords にアクセスできます。次に、任意のコントローラー内から save メソッドを呼び出すことができます。

于 2013-01-02T17:19:16.160 に答える
0

これが最良の答えだと思います。データ フローをより詳細に制御することは、常に優れています。

@DCoder 大規模なアプリケーションでは、これが重要になると思います。aftersave() またはオーバーライド save() を使用してワークフローを忘れると、多くの問題が発生します。データベース内の行を見つけることができますが、本能的に save() を呼び出すため、行がどこから来ているのかわからない場合があります。別の方法として、save() と save() の両方を呼び出すカスタム関数を用意することをお勧めします。ただし、このカスタム メソッドが存在することを知っておく必要があります。

于 2013-01-03T11:48:58.623 に答える