Yii2 - ActiveDataProvider试图获取非对象的属性
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Yii2 - ActiveDataProvider试图获取非对象的属性相关的知识,希望对你有一定的参考价值。
当我尝试使用ActiveDataProvider显示连接表(hasOne连接)时,我收到以下错误:
php Notice – yiiaseErrorException
Trying to get property of non-object
我的模特:
public function dataProvider()
{
return new ActiveDataProvider([
'query' => Currency::find()->with('country'),
'pagination' => [
'pageSize' => 20,
],
'sort' => [
'defaultOrder' => [
'allowed' => SORT_DESC,
]
],
]);
}
hasOne连接:
public function getCountry()
{
return $this->hasOne(Countries::className(), ['country_code' => 'country_code']);
}
控制器:
public function actionManage()
{
return $this->render('manage', [
'dataProvider' => Currency::find()->dataProvider(),
]);
}
视图:
Pjax::begin(
['linkSelector' => 'a:not(.linksWithTarget)']
);
echo GridView::widget([
'dataProvider' => $dataProvider,
'columns' => [
[
'label' => 'Country',
'value' => function ($model) {
return $model->country->country_name;
},
],
],
]);
Pjax::end();
我在这做错了什么?
答案
尊敬的先生,您需要首先拥有关系名称国家/地区,如果您在数据库中设置关系,GII可以为您构建它。如果不是你可以通过2找到简单地做到!(不推荐)
echo GridView::widget([
'dataProvider' => $dataProvider,
'columns' => [
[
'label' => 'Country',
'value' => function ($model) {
return Country::findOne($model->country_id)->country_name;
},
],
],
]);
以上是关于Yii2 - ActiveDataProvider试图获取非对象的属性的主要内容,如果未能解决你的问题,请参考以下文章
如何在 yii2 ActiveDataProvider 中使用 postgres 函数 string_agg()?