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()?

如何将 ActiveDataProvider 与 select2 一起使用?

yii2GridView的简单使用

yii2之GridView小部件

利用yii2 gridview实现批量删除案例[转]

如何将原始 SQL 转换为 Yii2,如查找查询