Activerecord 不能更新一行

Activerecord cant update a row

我只想更新 table 的一列 我在更新 table 行时遇到此错误:

Call to a member function load() on null

这是我的操作:

public function actionAddNote(){

        $id = \Yii::$app->request->post('id');

        $model = MainRequest::findOne($id);

        if ($model->load(\Yii::$app->request->post())  && $model->validate())
        {
            if($model->update()){
                echo "1";
            }else {
                print_r($model->getErrors());
            }
        }

        return $this->renderAjax('add-extra-note',['model' => $model]);
    }

我的模型:

class MainRequest extends ActiveRecord {

    public static function tableName()
    {
        return "main_request";
    }


    public function behaviors()
    {
        return [
            DevNotificationBehavior::className(),
        ];
    }

    public function rules() {

        return [
            [
                ['who_req',
                'req_description',
                'req_date',
                'extra_note'

            ], 'safe']
         ];

    }

表单将正确呈现并且我可以看到我的文本但是当我提交时出现错误:

<div>

    <?php $form = ActiveForm::begin(); ?>

<?= $form->field($model, 'extra_note')->textInput(); ?>
<div class="form-group">
    <?= Html::submitButton('save', ['class' => 'btn green']) ?>
</div>

<?php ActiveForm::end(); ?>

</div>

谁能告诉我问题出在哪里?谢谢。

您应该加载模型并使用加载的模型来访问属性 并且您应该管理您没有要更新的模型但需要一个模型来调用更新渲染表单的初始情况,例如:

public function actionAddNote(){

      $myModel = \Yii::$app->request->post();

      $model = MainRequest::findOne($myModel->id);

      if (isset($model)){
        if ($model->load(\Yii::$app->request->post())  && $model->validate())
        {
            if($model->update()){
                echo "1";
            }else {
                print_r($model->getErrors());
            }
        }

      } else {
        $model = new MainRequest();
      }

      return $this->renderAjax('add-extra-note',['model' => $model]);
  }

使用Yii2的简单保存功能或updateAttributes:

public 函数 actionAddNote(){

    $id = \Yii::$app->request->post('id');

    $model = MainRequest::findOne($id);

    if ($model->load(\Yii::$app->request->post())  && $model->validate())
    {
        if($model->**save**()){
            echo "1";
        }else {
            print_r($model->getErrors());
        }
    }

    return $this->renderAjax('add-extra-note',['model' => $model]);
}