13

I have one temporary model as viewModel. In my CRUD actions (for example actionCreate) I want to get this viewModel data and assign that to a ActiveRecord model. I used below code but my model object atrribute always show NULL value for attributes:

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

I think $model->load(Yii::$app->request->post()) not working and object attribute being NULL. Is it Yii2 bug or my code is incorrect??

b24
  • 2,345
  • 6
  • 28
  • 50

7 Answers7

21

If there is no rule for your attribute the $model->load() will ignore those not in the rules of the model.

Add your attributes to the rules function

public function rules()
{
    return [
        ...
        [['attribute_name'], 'type'],
        ...
    ];
}
GAMITG
  • 3,670
  • 7
  • 30
  • 50
Jason G
  • 1,288
  • 16
  • 32
3

To fetch data for an individually attributes(db-fields) in yii2.0 then you should just do as:

echo $yourModel->getAttribute('email');
Kristijan Iliev
  • 4,747
  • 9
  • 24
  • 45
1

ActiveRecord $attributes is a private property Use $model->getAttribute(string)

GAMITG
  • 3,670
  • 7
  • 30
  • 50
Alex
  • 19
  • 1
1

You can use following codes:

$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';
Mahmut Aydın
  • 715
  • 10
  • 21
1

Declare attribute as private then

echo $yourModel->attribute 

work as expected

noc_nokout
  • 37
  • 5
0

You must remove all public properties (title, type, etc.) in your _User model and $model->attributes = $post will work correctly.

Michael
  • 50,573
  • 20
  • 128
  • 136
0

I have also encountered the same problem, i Add my attributes to the rules function,but also error. And i found the reason for this problem. It is beause that the submit form's name in corresponding view file is not the same as the model's name which you use in controller

[controller file]:

$model=new SearchForm();

[view file]:

<input name="SearchForm[attribus]" ...

or 

[view file]:

<?= $form->field($model,'atrribus')->textInput()?>
soc
  • 1
  • 1