Php Yii2 GridView列数据作为相关表属性的链接

Php Yii2 GridView列数据作为相关表属性的链接,php,gridview,yii2,Php,Gridview,Yii2,我正在尝试使用url链接类型中的一列创建GridView。这一列来自modelRegion(asRegion\u type-FK)中的关系,特别是此相关表的name属性。在这个GridView中,获取这些相关表的名称值并没有问题,但问题是将它们作为链接格式而不是普通名称提供。我在RegionSearch模型中将parentRegion.name设置为关系属性 查看: <?= GridView::widget([ 'dataProvider' => $dataProvi

我正在尝试使用url链接类型中的一列创建
GridView
。这一列来自model
Region
(as
Region\u type
-FK)中的关系,特别是此相关表的name属性。在这个
GridView
中,获取这些相关表的名称值并没有问题,但问题是将它们作为链接格式而不是普通名称提供。我在RegionSearch模型中将
parentRegion.name
设置为关系属性

查看

<?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],

            [
                'label' => 'View parent',
                'format' => 'raw',
                // here comes the problem - instead of parent_region I need to have parent
                'value' => function ($dataProvider) {
                     return Html::a('view', '/admin/region/view?id=' . $dataProvider->parent_region);
                 },
            ],

            'parentRegion.name',  // this is what I want to display in link value - name of this related data


            ['class' => 'yii\grid\ActionColumn'],
        ],
    ]); ?>
public function attributes()
{
            // add related fields to searchable attributes
            return array_merge(parent::attributes(), ['parentRegion', 'regionType']);
}

public function search($params)
{
    $query = Region::find();

    $dataProvider = new ActiveDataProvider([
        'query' => $query,
    ]);

    $query->joinWith(['parentRegion' => function($query) { $query->from(['parentRegion' => 'region']); }]);
    $dataProvider->sort->attributes['parentRegion'] = [
        'asc' => ['parentRegion' => SORT_ASC],
        'desc' => ['parentRegion' => SORT_DESC],
    ];

    $this->load($params);

    if (!$this->validate()) {
        // uncomment the following line if you do not want to return any records when validation fails
        // $query->where('0=1');
        return $dataProvider;
    }

    $query->andFilterWhere(['like', 'name', $this->name])
        ->andFilterWhere(['like', 'parentRegion', $this->getAttribute('parentRegion')])

    return $dataProvider;
}
您能否帮助我如何将此属性名(相关表的属性)作为链接获取到此
GridView

  [
           'label' => 'Name',
           'format' => 'raw',
           'value' => function ($data) {
                         return Html::a($data->parentRegion->name, ['/admin/region/view', 'id' => $data->parent_id]);
                     },
    ],
这对我有用

'format' => 'raw',
'value' => function($data){return Html::a(Html::encode($data->country->name), ['country/view','id' => $data->countryid], ['data-pjax' => 0]);}

不工作,我得到了这个异常:试图获取gridview中出现的非objectlink的属性?不,我想这是因为$dataProvider没有属性parentRegion。这个属性我可以从模型类获得,但不能从$dataProvider获得。问题是$dataProvider中有此属性。在
区域
模型中是否有
parentRegion
关系?在我的模型区域中,我有公共函数getParentRegion(),因为我知道这是我可以通过$model->parentRegion作为经典属性访问的