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