当我尝试显示相关表中的数据时,出现错误Call to a member function isAttributeRequired() on null
。
我有以下表格:PromoCode
,SubscribePrice
和PromoToSubscribePrice
。
但是,当我尝试在促销代码中显示表格Sub时,出现错误。
我需要以下链接:创建表PromoCode
时,我们可以从表SubscribePrice
中选择数据(select2),而我们选择的内容仅存储在表{{ 1}}。
当前,当我尝试传递属性时,我得到NULL
我在所有表中都有许多连接
型号:SubscribeToPromoCode
PromoCode
控制器:public function getPromoToSubscribePrice()
{
return $this->hasMany(SubscribePrice::class, ['id' => 'id'])
->viaTable('promo_to_subscribe_price', ['promo_id' => 'id']);
}
PromoCodeController
和public function actionCreate()
{
$model = new PromoCode();
$price = SubscribePrice::find();
$PromoToSubscribePrice = new PromoToSubscribePrice();
$PromoToSubscribePrice->promo_id = $model->id;
$PromoToSubscribePrice->price_id = $model->article_id;
$PromoToSubscribePrice->setAttributes(Yii::$app->request->post());
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('create', [
'model' => $model,
'promo' => $price,
]);
}
}
:
view
结果:错误:在null上调用成员函数isAttributeRequired()。
我在做什么错了?
日志:
<?= $form->field($promo, 'description')->widget(Select2::className(), [
'data' => SubscribePrice::find()->orderBy('currency'),
'options' => [
'placeholder' => 'Select contributors ...',
'multiple' => true
],
'pluginOptions' => [
'allowClear' => true
],
]); ?>
答案 0 :(得分:1)
更新
除了先前发现的问题之外,您在Select2
的{{1}}选项中也遇到了相同的错误
'data' => SubscribePrice::find()->orderBy('currency'),
您也在那里传递了ActiveRecord
实例,而您需要传递带有name=>value
对的数组,它应该是
'data' => \yii\helpers\ArrayHelper::map(SubscribePrice::find()->orderBy('currency')->all(),'id','currency')
使用ArrayHelper::map()将列提取为关联数组并将其列出在select2中。
您的问题在actionCreate()
的第二行中
$price = SubscribePrice::find();
由于$price
持有ActiveRecord实例而不是model
实例,并且$price
在这一行中以promo
的形式传递给视图
return $this->render('create',
[
'model' => $model,
'promo' => $price,
]
);
在ActiveForm字段填充<?= $form->field($promo, 'description')->widget(Select2::className(), [
中进一步使用,而在填充字段时,您需要模型实例而不是ActiveQuery
,因此将其更改为。
$price = new SubscribePrice();
或
$price = SubscribePrice::find()->where(['column'=>$value])->limit(1)->one();
满足您要求的那个。