【问题标题】:model->attributes in Yii2 always has NULL valueYii2 中的 model->attributes 总是有 NULL 值
【发布时间】:2014-07-18 11:06:32
【问题描述】:

我有一个临时模型作为 viewModel。在我的 CRUD 操作(例如 actionCreate)中,我想获取此 viewModel 数据并将其分配给 ActiveRecord 模型。我使用了下面的代码,但我的模型对象属性总是显示属性的 NULL 值:

$model = new _Users();
if ($model->load(Yii::$app->request->post())) {
    Yii::info($model->attributes,'test'); // NULL
    $attributesValue =[
            'title' => $_POST['_Users']['title'],
            'type' => $_POST['_Users']['type'],
        ];
    $model->attributes = $attributesValue;
    Yii::info($model->attributes,'test'); // NULL

    $dbModel = new Users();
    $dbModel->title = $model->title;
    $dbModel->type = $model->type . ' CYC'; // CYC is static type code
    Yii::info($dbModel->attributes,'test'); // NULL

    if ($dbModel->save()) {
            return $this->redirect(['view', 'id' => $dbModel->id]); // Page redirect to blank page
        }
}
else {
        return $this->render('create', [
            'model' => $model,
        ]);
}

我认为 $model->load(Yii::$app->request->post()) 不起作用并且对象属性为 NULL。是 Yii2 的 bug 还是我的代码不正确??

【问题讨论】:

  • 您必须为此属性设置规则
  • 首先...给我看看你的表格和模型
  • $model->attributes = $_POST['_Users'];

标签: php yii-extensions yii yii2


【解决方案1】:

如果您的属性没有规则,$model->load() 将忽略那些不在模型规则中的规则。

将你的属性添加到规则函数中

public function rules()
{
    return [
        ...
        [['attribute_name'], 'type'],
        ...
    ];
}

【讨论】:

    【解决方案2】:

    然后将属性声明为私有

    echo $yourModel->attribute 
    

    按预期工作

    【讨论】:

      【解决方案3】:

      要在 yii2.0 中获取单个属性(db-fields)的数据,那么你应该这样做:

      echo $yourModel->getAttribute('email');
      

      【讨论】:

        【解决方案4】:

        ActiveRecord $attributes 是私有属性 使用$model->getAttribute(string)

        【讨论】:

          【解决方案5】:

          您可以使用以下代码:

          $model = new _Users();
          $model->attributes=Yii::$app->request->post('_Users');
          $model->title= $model->title
          $model->type = $model->type . ' CYC'; // CYC is static type code
          #$model->sampleAttribute='Hello World';
          

          【讨论】:

            【解决方案6】:

            您必须删除_User 模型中的所有公共属性(title、type 等),$model->attributes = $post 才能正常工作。

            【讨论】:

              【解决方案7】:

              我也遇到了同样的问题,我把我的属性加到rules函数中,还是报错。我找到了这个问题的原因。这是因为相应视图文件中提交表单的名称与您在控制器中使用的模型名称不同

              [controller file]:
              
              $model=new SearchForm();
              
              [view file]:
              
              <input name="SearchForm[attribus]" ...
              
              or 
              
              [view file]:
              
              <?= $form->field($model,'atrribus')->textInput()?>
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2012-05-17
                • 1970-01-01
                • 2013-08-25
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2020-04-09
                相关资源
                最近更新 更多