如何更新用户表yii2中的字段

时间:2018-06-13 04:23:47

标签: yii2 yii2-advanced-app

我已修改用户表添加一列,列的名称为 id_periode ,我有高级模板,所以从后端控制器我想要更新该列值。我像这样创建控制器

public function actionPindahPeriode($id)
{
   $model2 = $this->findModel2($id);
    if ($model2->load(Yii::$app->request->post()) ) {
        $model2->save();
        return $this->render('view', 
            'model2' => $this->findModel2($id),
        ]);

    }
    date_default_timezone_set('Asia/Makassar');
    $jam_sekarang = date('h:i:s', time());
    $tgl_sekarang=date('Y-m-d');
    $model_periode = Periode::find()
            ->andWhere(['>','mulai_daftar_ulang',$tgl_sekarang ])
            ->asArray()
            ->all();

    return $this->renderAjax('pindah_periode', [
        'model_periode' => $model_periode,
        'model2' => $this->findModel2($id),
    ]);

}

findModel2函数就像这样

protected function findModel2($id)
{
    if (($model = User::findOne($id)) !== null) {
        return $model;
    }

    throw new NotFoundHttpException('The requested page does not exist.');
}

我将该模型渲染为表格

<?php $form = ActiveForm::begin(); ?>
<?php $listData=ArrayHelper::map($model_periode,'id',function($model_periode){
                        return $model_periode['nama_periode'].' Tahun '.$model_periode['tahun'];});?>
<?= $form->field($model2, 'id_periode')->dropDownList($listData, ['prompt' => '']) ?>
<div class="form-group">
    <?= Html::submitButton('Save', ['class' => 'btn btn-danger']) ?>
</div>

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

表单正在运行,但我无法更新表用户中的值 id_periode 列。没有错误显示,有任何建议吗?

2 个答案:

答案 0 :(得分:3)

  1. 确保您的新属性id_periodepublic function rules(){}函数中定义了规则,这样$model2->load(Yii::$app->request->post())将从提交的数据中分配此值。
  2. 无论记录是否已保存,
  3. $model->save()都会返回bool值。你可以利用它来检查是否有任何验证错误。我:

    if($model2->save()) {
        return $this->render('view', 
            'model2' => $this->findModel2($id),
        ]);
    } else {
         return $this->renderAjax('pindah_periode', [
        'model_periode' => $model_periode,
        'model2' => $this->findModel2($id),
    ]);
    

    }

答案 1 :(得分:2)

选项1:检查用户模型验证规则中的列字段。您需要将不需要的列字段从必需属性转移到安全属性。
选项2:尝试$model2->save(false);false将覆盖您的模型规则。