Я пытаюсь иметь GridView
с одним столбцом в типе ссылок URL. Этот столбец связан с отношением в модели Region
(как region_type
- FK), в частности, атрибутом имени этой связанной таблицы. В этом GridView
у меня не возникло проблем, чтобы получить значение имени этой связанной таблицы, но проблема заключается в том, чтобы предоставить им формат ссылки вместо простого имени. Я установил parentRegion.name
как атрибут отношения в модели RegionSearch.YII2 Данные столбца GridView как ссылка на связанный атрибут таблицы
Просмотр:
<?= 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'],
],
]); ?>
RegionSearch:
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
как ссылку?
Не работает, я получаю это исключение: Пытаюсь получить свойство не-объекта – kennySystemExit
ссылка появится в GridView? – GAMITG
Нет, я думаю, это потому, что $ dataProvider не имеет свойства parentRegion. Это свойство можно получить из класса модели, но не из $ dataProvider. Проблема заключается в том, чтобы иметь это свойство в $ dataProvider. – kennySystemExit