私は yii フレームワークで新しいです。yii フレームワークでアプリケーションを作成します。私はgiiを使用してモデル、コントローラー、ビューを作成しました。その後、データベーステーブルを変更します。2 つの列を削除し、3 つの新しい列を追加しました。その後、gii を使用してモデルを上書きします。しかし、そのテーブルに保存しようとすると、プロパティ(削除した古い列)が定義されていません。これに対する解決策を教えてください。
3 に答える
モデルの検証rules()
メソッドですべての列を定義する必要があります。たとえば、テーブル内のすべての列にルールが定義されていることを確認してください(最大長が128の文字列の場合)。
public function rules()
{
return array(
...
array('myField', 'length', 'max'=>128),
...
);
}
検証ルールに関する情報を参照してください。
また、CActiveFormウィジェットを使用していて、次のようなフィールドを呼び出す場合のフォームの場合:
echo $form->labelEx($model,'myField');
echo $form->textField($model,'myField');
attributeLabels()
次に、モデルでもメソッドでもラベルが定義されていることを確認する必要があります。次に例を示します。
public function attributeLabels()
{
return array(
...
'myField'=>'My Field',
...
);
}
search()
最後に、フィールドを検索可能にする場合は、モデルのメソッドにステートメントを追加する必要があります。次に例を示します。
public function search()
{
...
$criteria->compare('myField',$this->myField);
...
}
これらの要素がすべて存在することを確認してください。「*が定義されていません」というエラーが発生しないようにしてください。
また、メインの構成ファイルでスキーマキャッシュを使用している場合は、アプリが新しいデータベース構造を表示する前に、キャッシュをクリアする必要があります。
古いプロパティを使用するフォーム、ウィジェットがあるため、変更はビューにも設定する必要があります!! (この正確な保存の問題については、モデルの保存と更新アクションから部分的に責任があるものを修正する必要があります._form.php
モデルで行ったのと同じことを行うことができます: (gii を使用して再生成する) または手動で編集することができます (これに慣れることをお勧めします。列名の変更のFind & edit
ほとんどのテキスト エディターで単純な作業を行います)。
MVC が一般的にどのように機能するか、Yii で特別にどのように機能するかについてもう少し読む必要があるかもしれません
これは、スキーマ キャッシュを使用しているためです。テーブル スキーマは Yii にキャッシュされます。AR キャッシュをフラッシュする必要があります。完全なスキーマ キャッシュをフラッシュするか、Yii::app()->db->schema->getTable('tablename', true); を使用します。あなたの行動の開始時に。これにより、モデルのスキーマ キャッシュが更新されます。