2015-08-17 42 views
2

排序有关系yii2相关模型

模型Shop.php

public function getShopAddr() 
     { 
      return $this->hasOne(SprShopAddr::className(), ['id' => 'shop_addr_id']); 
     } 

模型SprShopAddr.php

public function getDivision() 
    { 
     return $this->hasOne(SprDivision::className(), ['id' => 'division_id']); 
    } 

模型SprDivision.php

public function getShopAddrs() 
    { 
     return $this->hasMany(SprShopAddr::className(), ['division_id' => 'id']); 
    } 

视图的index.php

<?= GridView::widget([ 
      'dataProvider' => $dataProvider, 
      //'filterModel' => $searchModel, 
      'summary' =>false, 
      'columns' => [ 
       'location_code', 
       [ 
        'label' => 'Дивизион', 
        'attribute' => 'division_id', 
        'value' => 'shopAddr.division.division' 
       ], 
       ['class' => 'yii\grid\ActionColumn', 'template' => '{update}{delete}'],   
      ] 
     ]); ?> 

在GridView的现场shopAddr.division.division排序不能正常工作。如何解决它?

回答

0

相关模型,你必须正确配置的dataProvider

setSort功能您可以在this tutorial正确的信息。

最重要的部分是你必须在yourModelSearch这种关系shopAddr.division.division定义$ dataProvider-> setSor(...)函数这样

$dataProvider->setSort([ 
     'attributes' => [ 
      'yuorRelatedFieldName' => [ 
          'asc' => [ $tableRelated . '.yourField' => SORT_ASC ], 
          'desc' => [ $tableRelated . '.yourField' => SORT_DESC ], 
          'label' => 'yuorLabel' 
      ],     
     ], 
     'defaultOrder' => ['yuorDefaultOrderField' => SORT_ASC], 
    ]); 
+0

我阅读本教程中,我problrm ,3,而不是在教程2中。 – Fisher

+0

同样在本教程的场景3中,排序由'yuorModelSearch'管理。如果你没有配置这部分,你在网格视图中的相关字段不允许排序 – scaisEdge