eniac05
eniac05

Reputation: 491

How to update field in user table yii2

I have modified user table to add one column, the column's name is id_periode, I have advanced template, so from backend controler i want update that column value. I create controller like this

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),
    ]);

}

The findModel2 function is like this

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

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

I render that model into a form

<?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(); ?>  

The form is working but i can not update the value id_periode column in table user. There is not error showing, any suggestion?

Upvotes: 0

Views: 1539

Answers (2)

Kalu
Kalu

Reputation: 571

  1. Make sure your new attribute id_periode has a rule defined in the public function rules(){} function, this way $model2->load(Yii::$app->request->post()) will assign this value from the data submitted.
  2. $model->save() returns a bool value whether the record was saved or not. You can use this to your advantage and check whether there are any validation errors.ie:

    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),
    ]);
    

    }

Upvotes: 3

Gru
Gru

Reputation: 80

Option 1 : Check your column fields in User model's validation rules. You need to shift unwanted column fields from required attribute to safe attribute.
Option 2 : try $model2->save(false);. false will override your model rules.

Upvotes: 2

Related Questions