1

私はちょうどyiiに移行し、giiでCActiveRecordを作成したモデルを作成しました。その後、データベースにいくつかの変更を加えて混乱させました。私の質問は次のとおりです。

1 - データベースに変更を加えた後、gii でモデルを再作成する必要がありますか? yii のアクティブ レコードが zend や codigniter などの他のフレームワークよりもはるかに複雑なのはなぜですか!?

編集 :

モデル クラスを変更しない場合、データベース関数をどこに配置すればよいでしょうか !!? そうするためのモデルはありませんか?

4

4 に答える 4

1

私がgiiでモデルを生成した場合、それは一度だけの仕事です。このモデルの使用をすぐに開始するには。その後、データベース構造を変更した場合(ところで、どのような変更を行ったかはわかりませんでした)、モデルを手動で変更できます。

gii を介してモデルを生成し、モデルを変更しなかった場合は、再度生成することができます (手動で変更を加えていないため)。すでに変更している場合は、変更するのに苦労する必要はありません (そして、ActiveRecord について学習する旅に出ます)。

モデルをゼロから作成することを学習するためだけに(giiなし)。

于 2013-04-12T05:59:48.037 に答える
0

Gii を使用して、既存のモデルに適用する変更をいつでもプレビューできます (diff リンクを使用)。その後、それらを適用できますが、モデル (メソッド) 内にカスタム ルールを挿入した場合rules()、それらは上書きされます。そうです、データベース テーブルに何らかの変更を加える場合は、CActiveRecord サブクラス (モデル) を更新する必要があります。そうしないと、Yii は新しいフィールドを認識できないか、Yii が持っていると考えるフィールドにアクセスしようとして失敗します。しかし、データベースから削除されました。

モデル内にカスタム メソッドを記述することを妨げるものは何もありません。しかし、「データベース関数を配置する」とは正確にはどういう意味ですか?

于 2013-04-12T05:34:32.587 に答える
-1

理想的には、DB の構造変更後にモデルを再作成する必要があります。

私たちのプロジェクトでは、ルールに従っています。

gii によって生成されたモデルに変更を加えないでください。そのため、将来 DB に変更があった場合、モデルを直接再生成でき、マージ作業は不要です。

これはデザインの哲学とも合致し、

**Objects** hide their data behind abstractions and expose functions that operate on that data.

**Data structures**
expose their data and have no meaningful functions. It only has methods to operate on data.

ActiveRecords (yii のモデル) はデータ構造に他なりません。ActiveRecords にビジネス ルールを追加することで、データ構造とオブジェクトを混在させることができます。

于 2013-04-12T05:14:57.833 に答える