2017-03-16 9 views
1

ActiveDataProvider를 사용하여 일반적인 ModelSearch를 사용하고 있으며 gridview에서 정렬에 가상/관련 속성을 추가하고 싶습니다. 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를 추가 ed ModelSearch code .. please – scaisEdge

+0

[도움이 될 것입니다] (http://www.yiiframework.com/wiki/621/filter-sort-by-calculated-related-fields-in-gridview-yii-2-0/) –

+0

물론 내가 말했듯이 setSort를 사용하면 다른 모든 속성이 정렬을 멈추고 다른 모든 속성도 다시 정의해야합니다. 기존 속성 옆에 정렬에 새 속성을 추가 **하는 기본 제공 솔루션이있는 경우 문제가됩니다. – user2511599

답변

1

당신은 setSort 방법과 정렬 속성을 설정할 수 있지만,이 경우 당신은 정렬 할 모든 열, 관계에서뿐만 아니라 열을 설정해야합니다.

하나 열을 추가 할 경우이을 (병합 현재 기존 종류의 새와 속성을) 시도 할 수 있습니다 :

$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 .: 방금 ​​업데이트 된 답변에서 세 번째 예를 사용해보세요. –