Как обновить поле в пользовательской таблице yii2 - PullRequest
0 голосов
/ 13 июня 2018

Я изменил пользовательскую таблицу, добавив один столбец, имя столбца 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 голосов
/ 13 июня 2018
  1. Убедитесь, что в вашем новом атрибуте id_periode определено правило, определенное в функции public function rules(){}, поэтому $model2->load(Yii::$app->request->post()) назначит это значение из отправленных данных.
  2. $model->save() возвращает значение bool независимо от того, была ли запись сохранена или нет.Вы можете использовать это в своих интересах и проверить, есть ли какие-либо ошибки проверки .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),
    ]);
    

    }

0 голосов
/ 13 июня 2018

Вариант 1. Проверьте поля столбцов в правилах проверки модели пользователя.Вам необходимо переместить ненужные поля столбца из обязательного атрибута в безопасный атрибут.
Вариант 2: попробуйте $model2->save(false);.false переопределит ваши правила модели.

...