2015-08-17 93 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