如何只更新Yii中活动记录的特定字段?

lvi*_*vil 10 php activerecord model yii sql-update

我有一个模型(ActiveRecord)有5个属性(DB列).
我获取特定记录并填充包含3个字段的表单(不应更新其他两个字段).
然后我更改特定字段并按保存.

如何更新记录,而不是触及不在表单中的字段?

小智 35

mazzucci指出的方法比必要的更复杂.试试这个:

YourTable::model()->updateByPk($id, array(
    'field1' => NewVal1,
    'field2' => NewVal2,
    'field3' => NewVal3
));
Run Code Online (Sandbox Code Playgroud)

  • 很好,但onBeforeSave事件不能通过这种方式触发. (2认同)

Ste*_*tei 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,
        ));
}
Run Code Online (Sandbox Code Playgroud)

总而言之,该操作执行以下操作:

  • 从数据库加载模型(包含从数据库设置的所有值)
  • 分配表单中的值(这将仅覆盖表单中发送的属性)
  • 模型保存在数据库中

因此,您不需要在表单中包含所有模型属性。表单中定义的内容将在模型中更改。所有其他字段都不会更改,因为模型是在设置表单更改之前从数据库加载的。