5つのプロパティ(DB列)を持つモデル(ActiveRecord)があります。特定のレコードをフェッチし、 3
つのフィールド
を持つフォームにデータを入力します(他の2つのフィールドは更新しないでください)。
次に、特定のフィールドを変更して保存を押します。
フォームにないフィールドに触れずに、レコードを更新するにはどうすればよいですか?
5つのプロパティ(DB列)を持つモデル(ActiveRecord)があります。特定のレコードをフェッチし、 3
つのフィールド
を持つフォームにデータを入力します(他の2つのフィールドは更新しないでください)。
次に、特定のフィールドを変更して保存を押します。
フォームにないフィールドに触れずに、レコードを更新するにはどうすればよいですか?
mazzucciが指摘するアプローチは、必要以上に複雑です。これを試して:
YourTable::model()->updateByPk($id, array(
'field1' => NewVal1,
'field2' => NewVal2,
'field3' => NewVal3
));
コントローラに次のようなメソッドを作成できます。
public function actionUpdate($id) {
$model = $this->loadModel($id, 'User');
if (isset($_POST['User'])) {
$model->setAttributes($_POST['User']);
if ($model->save()) {
$this->redirect(array('view', 'id' => $model->id_user));
}
}
$this->render('update', array(
'model' => $model,
));
}
要約すると、アクションは以下を実行します。
したがって、フォームにすべてのモデル属性を含める必要はありません。フォームで定義されているものは、モデルで変更されます。フォームの変更を設定する前にモデルがデータベースからロードされるため、他のすべてのフィールドは変更されません。