2017-03-16 17 views
1

私はActiveDataProviderで通常のModelSearchを使用しています。グリッドビューでソートするために仮想/関連属性を追加したいと思います。私がsetSortでやっているのに、この唯一の属性を追加しようとすると、他のすべての属性はそれ以上ソートできません。 への組み込み方法がありますか?の属性を並べ替えに追加しますか?どうもありがとう!Yii2ソートする関連する属性を追加する

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

    $dataProvider = new ActiveDataProvider([ 
     'query' => $query, 
     'sort' => ['defaultOrder' => ['aonr' => SORT_ASC]], 
     'pagination' => [ 
      'pageSize' => 15, 
     ], 
    ]); 

$dataProvider->setSort([ 
    'attributes' => [ 
     'lwnr' => [ 
      'asc' => ['lwnr' => SORT_ASC], 
      'desc' => ['lwnr' => SORT_DESC], 
      'label' => 'lwnr', 
      'default' => SORT_DESC, 
     ], 
    ] 
]); 

$this->load($params); 
... 
} 
+0

は、あなたの質問を更新し、あなたのrelatを追加ModelSearch code .. please – scaisEdge

+0

[これは役に立ちます](http://www.yiiframework.com/wiki/621/filter-sort-by-calculated-related-fields-in-gridview-yii-2-0/) –

+0

もちろん、私が言ったように、私がsetSortを使用しているならば、他のすべての属性はソートをやめ、私は他のすべての属性もまた定義しなければなりません。問題は、**既存のものの隣にSortに新しい属性を追加するための組み込みのソリューションがある場合です。 – user2511599

答えて

1

あなたはsetSort方法でソート可能な属性を設定することができますが、この場合には、あなたが関係からわずか列ではなく、ソートしたいすべて列を設定する必要があります。

使用すると、1つの列を追加したい場合は、この(現在は既存の並べ替えをマージすると、新しいものと属性)試すことができます。

$dataProvider->setSort([ 
     'attributes' => array_merge(
      $dataProvider->getSort()->attributes, 
      [ 
       'lwnr' => [ 
        'asc'  => ['lwnr' => SORT_ASC], 
        'desc' => ['lwnr' => SORT_DESC], 
        'label' => 'lwnr', 
        'default' => SORT_DESC, 
       ], 
      ] 
     ), 
    ]); 

をしたり、手で欠落している属性/列を追加することができます(ありますはるかに良いアイデア)

$dataProvider->setSort([ 
     'attributes' => 
      [ 
       'lwnr' => [ 
        'asc'  => ['lwnr' => SORT_ASC], 
        'desc' => ['lwnr' => SORT_DESC], 
        'label' => 'lwnr', 
        'default' => SORT_DESC, 
       ], 
       // Other attribute 
       'id' => [ 
        'asc' => ['id' => SORT_ASC], 
        'desc' => ['id' => SORT_DESC], 
       ], 
       ... 
      ], 
    ]); 

別の方法:

$dataProvider->getSort()->attributes['lwnr'] = [ 
        'asc'  => ['lwnr' => SORT_ASC], 
        'desc' => ['lwnr' => SORT_DESC], 
        'label' => 'lwnr', 
        'default' => SORT_DESC, 
       ]; 
+0

ありがとうございました。上のもの)。 – user2511599

+0

なぜ下位の方がはるかに良いアイデアですか? – user2511599

+0

属性フィールドには既定のデータ(dbテーブルの列)があります。 最初の例では、ページがレンダリングされるたびに、デフォルトのソート属性が生成され、アクセスされ、新しい値とマージされ、結果が再割り当てされます。これは不要です.DB表に動的列がなく、これらの値を手動で定義できるからです。 Ps .: 更新されたばかりの回答から3番目の例を試してください –

関連する問題