【问题标题】:How to update field in user table yii2如何更新用户表yii2中的字段
【发布时间】:2018-06-13 04:23:46
【问题描述】:

我已修改用户表以添加一列,该列的名称是 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 列。没有显示错误,有什么建议吗?

【问题讨论】:

  • print_r($model2); $model2->save() 之前;检查您是否在模型中获得“id_periode”属性。或者检查您的 common\config\main-local.php 并设置 'enableSchemaCache' => false。
  • 能否请您分享模型«User»源代码,我感觉您缺少一些配置,因为我已经做了很多次。如果需要,请使用 Gist。
  • @Sumit 和@moplin,非常感谢您的回复,我已经解决了我的问题,首先我尝试像下面的 Gru 建议一样打印Yii::$app-&gt;request-&gt;post(),结果给了我具有 id_periode 的数组和价值,所以我得出结论,我应该把价值交给模型,所以这就是我所做的,$POST_VARIABLE=Yii::$app-&gt;request-&gt;post('User'); $model2-&gt;id_periode = $POST_VARIABLE['id_periode']; 然后保存模型

标签: yii2 yii2-advanced-app


【解决方案1】:
  1. 确保您的新属性id_periode 具有在public function rules(){} 函数中定义的规则,这样$model2-&gt;load(Yii::$app-&gt;request-&gt;post()) 将从提交的数据中分配此值。
  2. $model-&gt;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),
    ]);
    

    }

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 选项1:我只有一个用户模型,在通用模型目录中,但规则是这样的public function rules() { return [ ['status', 'default', 'value' =&gt; self::STATUS_ACTIVE], ['status', 'in', 'range' =&gt; [self::STATUS_ACTIVE, self::STATUS_DELETED]], ]; }
    • 选项 2:我尝试了$model2-&gt;save(false); 但值仍然无法更新,我现在很困惑
    • 替代方案:打印发布的数据Yii::$app-&gt;request-&gt;post(),以确认您是否收到。如果 id_periode 设置了值;在$model2-&gt;save(false);之前尝试$model2-&gt;id_periode = $post_data_for[id_period];
    • 我已经解决了我的问题,首先我尝试Yii::$app-&gt;request-&gt;post() 喜欢你的建议,结果给了我具有 id_periode 和值的数组,所以我得出结论我应该取值并给出那是模型,所以这就是我所做的,` $POST_VARIABLE=Yii::$app->request->post('User'); $model2->id_periode = $POST_VARIABLE['id_periode'];` 然后保存模型
    • $model2-&gt;load(Yii::$app-&gt;request-&gt;post()) 仅加载已发布的模型(即表格)相关数据;但是Yii::$app-&gt;request-&gt;post() 会给你所有发布的表单数据。快乐编码..!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    • 2019-07-30
    相关资源
    最近更新 更多