我有一个临时模型作为viewModel。在我的CRUD操作(例如actionCreate)中,我想获取此viewModel数据并将其分配给ActiveRecord模型。我使用下面的代码,但我的模型对象atrribute总是显示属性的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错误还是我的代码不正确?
答案 0 :(得分:20)
如果您的属性没有规则, $model->load()
将忽略那些不在模型规则中的规则。
将您的属性添加到规则函数
public function rules()
{
return [
...
[['attribute_name'], 'type'],
...
];
}
答案 1 :(得分:3)
要获取yii2.0中单独属性(db-fields)的数据,那么您应该这样做:
echo $yourModel->getAttribute('email');
答案 2 :(得分:1)
ActiveRecord $attributes
是私有财产
使用$model->getAttribute(string)
答案 3 :(得分:1)
您可以使用以下代码:
$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';
答案 4 :(得分:1)
然后将属性声明为私有
echo $yourModel->attribute
按预期工作
答案 5 :(得分:0)
您必须删除_User
模型中的所有公共属性(标题,类型等),$model->attributes = $post
才能正常运行。
答案 6 :(得分:0)
我也遇到了同样的问题,我将我的属性添加到规则功能,但也是错误。我找到了这个问题的原因。这是因为相应视图文件中的提交表单名称与您在控制器中使用的模型名称不同
[controller file]:
$model=new SearchForm();
[view file]:
<input name="SearchForm[attribus]" ...
or
[view file]:
<?= $form->field($model,'atrribus')->textInput()?>