我用gii工具创建了crud应用程序.我有3个表tbl_targetcities,lib_cities和lib_provinces.我能够将lib_cities连接到tbl_targetciteis而不是lib_provinces.而且城市/市政的分类也不起作用.它似乎根据ID进行排序.
tbl_target_cities

lib_cities

lib_provinces

样本视图

到目前为止,这是我在模型中的关系.
public function getCityName()
{
return $this->hasOne(LibCities::className(),['city_code'=>'city_code']);
}
Run Code Online (Sandbox Code Playgroud)
在我的视图文件中......
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
[
'attribute'=>'city_code',
'value'=>'cityName.city_name'
],
[
'attribute'=>'prov code',
'value'=>'cityName.city_name'
],
'kc_classification',
'cluster',
'grouping',
'priority',
'launch_year',
['class' => 'yii\grid\ActionColumn'],
],
]); ?>
Run Code Online (Sandbox Code Playgroud)
如何从lib_provinces显示prov_name ???
编辑在评论框中回答用户2839376的问题
在搜索模型类中
$query = TblSpBub::find();
$query->joinWith('brgyCode')->joinWith(['cityCode'])->joinWith(['cityCode.provCode']);
$covered= LibAreas::find()->where(['user_id'=>yii::$app->user->identity->id])->all();
$query->all();
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort'=> ['defaultOrder' => ['id'=>SORT_DESC]],
]);
$dataProvider->sort->attributes['city'] = [
'asc' => ['lib_Cities.city_name' => SORT_ASC],
'desc' => ['lib_Cities.city_name' => SORT_DESC],
];
$dataProvider->sort->attributes['province'] = [
'asc' => ['lib_provinces.prov_name' => SORT_ASC],
'desc' => ['lib_provinces.prov_name' => SORT_DESC],
];
Run Code Online (Sandbox Code Playgroud)
在LibCities模型中添加新关系:
public function getProvince()
{
return $this->hasOne(LibProvince::className(),['prov_code'=>'prov_code']);
}
Run Code Online (Sandbox Code Playgroud)
并改变getCityName关系.你应该添加with()关系:
public function getCityName()
{
return $this->hasOne(LibCities::className(),['city_code'=>'city_code'])->with(['province']);
}
Run Code Online (Sandbox Code Playgroud)
并在视图中纠正你的columnto:
[
'attribute'=>'prov code',
'value'=>'cityName.province.prov_name'
],
Run Code Online (Sandbox Code Playgroud)