10

5つのプロパティ(DB列)を持つモデル(ActiveRecord)があります。特定のレコードをフェッチし、 3
つのフィールド を持つフォームにデータを入力します(他の2つのフィールドは更新しないでください)。 次に、特定のフィールドを変更して保存を押します。

フォームにないフィールドに触れずに、レコードを更新するにはどうすればよいですか?

4

2 に答える 2

35

mazzucciが指摘するアプローチは、必要以上に複雑です。これを試して:

YourTable::model()->updateByPk($id, array(
    'field1' => NewVal1,
    'field2' => NewVal2,
    'field3' => NewVal3
));
于 2013-02-26T11:20:34.897 に答える
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,
        ));
}

要約すると、アクションは以下を実行します。

  • データベースからモデルをロードします(データベースから設定されたすべての値を使用)
  • フォームに値を割り当てます(これにより、フォームで送信された属性のみが上書きされます)
  • モデルはデータベースに保存されます

したがって、フォームにすべてのモデル属性を含める必要はありません。フォームで定義されているものは、モデルで変更されます。フォームの変更を設定する前にモデルがデータベースからロードされるため、他のすべてのフィールドは変更されません。

于 2012-04-23T06:12:38.000 に答える