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

如何更新用户表yii2中的字段,yii2,yii2-advanced-app,Yii2,Yii2 Advanced App,我修改了用户表以添加一列,该列的名称是id\u periode,我有高级模板,所以我希望从后端控制器更新该列的值。我创建这样的控制器 public function actionPindahPeriode($id) { $model2 = $this->findModel2($id); if ($model2->load(Yii::$app->request->post()) ) { $model2->save(); r

我修改了用户表以添加一列,该列的名称是id\u 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),
    ]);

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

    throw new NotFoundHttpException('The requested page does not exist.');
}
findModel2函数如下所示

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

}
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\u period列。显示时没有错误,有什么建议吗?

选项1:检查用户模型验证规则中的列字段。您需要将不需要的列字段从required属性转换为safe属性

选项2:尝试
$model2->保存(false)
false
将覆盖模型规则。

选项1:检查用户模型验证规则中的列字段。您需要将不需要的列字段从required属性转换为safe属性
选项2:尝试
$model2->保存(false)
false
将覆盖您的模型规则

  • 确保您的新属性
    id\u period
    具有在
    公共函数规则(){}
    函数中定义的规则,这样
    $model2->load(Yii::$app->request->post())
    将从提交的数据中分配此值
  • $model->save()
    返回一个布尔值,无论记录是否保存。您可以利用这一点,检查是否存在任何验证错误。例如:

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

  • 确保您的新属性
    id\u period
    具有在
    公共函数规则(){}
    函数中定义的规则,这样
    $model2->load(Yii::$app->request->post())
    将从提交的数据中分配此值
  • $model->save()
    返回一个布尔值,无论记录是否保存。您可以利用这一点,检查是否存在任何验证错误。例如:

    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:我只有一个在公共模型目录中的用户模型,但是规则是这样的
    public function rules(){return[['status','default','value'=>self::status\u ACTIVE],'status','in','range'=>self::status\u ACTIVE,self::status\u DELETED],]}
    选项2:我尝试了
    $model2->保存(false)
    但该值仍然无法更新,我现在很困惑替代方法:打印发布的数据
    Yii::$app->request->post()
    以确认您是否正在获取。如果id_periode设置了值;尝试
    $model2->id_periode=$post_data_作为[id_period]
    $model2>保存之前(false)我已经解决了我的问题,首先我试着按照你的建议:$app->request->post()
    ,结果给了我一个有id_periode和值的数组,所以我得出结论,我应该取这个值并将其交给模型,所以我就是这么做的,`$post_VARIABLE=Yii:$app->request->post('User')$model2->id_periode=$POST_变量['id_periode'];`然后保存模型
    $model2->load(Yii::$app->request->post())
    只加载发布的模型(即表)相关数据;但是
    Yii::$app->request->post()
    将为您提供所有已发布的表单数据。快乐的编码。。!选项1:我只有一个在公共模型目录中的用户模型,但是规则是这样的
    public function rules(){return[['status','default','value'=>self::status\u ACTIVE],'status','in','range'=>self::status\u ACTIVE,self::status\u DELETED],]}
    选项2:我尝试了
    $model2->保存(false)
    但该值仍然无法更新,我现在很困惑替代方法:打印发布的数据
    Yii::$app->request->post()
    以确认您是否正在获取。如果id_periode设置了值;尝试
    $model2->id_periode=$post_data_作为[id_period]
    $model2>保存之前(false)我已经解决了我的问题,首先我试着按照你的建议:$app->request->post()
    ,结果给了我一个有id_periode和值的数组,所以我得出结论,我应该取这个值并将其交给模型,所以我就是这么做的,`$post_VARIABLE=Yii:$app->request->post('User')$model2->id_periode=$POST_变量['id_periode'];`然后保存模型
    $model2->load(Yii::$app->request->post())
    只加载发布的模型(即表)相关数据;但是
    Yii::$app->request->post()
    将为您提供所有已发布的表单数据。快乐的编码。。!打印(型号2);在$model2->save()之前;检查您是否在模型中获得“id\u periode”属性。或者检查您的common\config\main-local.php并设置'enableSchemaCache'=>false。您能分享模型«User»源代码吗?我感觉您缺少一些配置,因为我已经做了很多次了。如果需要,请使用Gist。@Sumit和@moplin,非常感谢您的回复,我已经解决了我的问题,首先我尝试打印
    Yii::$app->request->post()
    ,就像下面的Gru建议一样,结果给了我一个具有id周期和值的数组,所以我得出结论,我应该获取该值并将其提供给模型,所以我就是这么做的,
    $POST_VARIABLE=Yii::$app->request->POST('User')$模型2->id_periode=$POST_变量['id_periode']然后保存模型打印文件($model2);在$model2->save()之前;检查您是否在模型中获得“id\u periode”属性。或者检查您的common\config\main-local.php并设置'enableSchemaCache'=>false。您能分享模型«User»源代码吗?我感觉您缺少一些配置,因为我已经做了很多次了。如果需要,请使用Gist。@Sumit和@moplin,非常感谢您的回复,我已经解决了我的问题,首先我尝试打印
    Yii::$app->request->post()
    ,就像下面的Gru建议一样,结果会给我一个具有id\u周期和值的数组,所以我会