2017-09-07 18 views
1

나는 내 gridview의 체크 박스 값 필드에 필요한 값을 가져올 수 없다는 문제가있다. checkbox 필드는 선택하거나 선택을 취소 할 수 있습니다. Therfore에는 member라는 부울 필드가 있는데, 0이 체크되지 않고 1이 체크 된 데이터 그 리드 값입니다.

일반적으로 gridview에는 4 개의 열이 있습니다. 테스트 용으로 데이터베이스 테이블의 'member'열을 체크 박스 열 앞에 추가 필드로 출력하여 'member'테이블 열의 값이 올바른지 확인합니다.

보기에는 두 개의 서로 다른 dataProvdiders, $ dataProvider 및 $ dataProviderMembers가 있으므로 $ model 객체를 사용할 수 없습니다. $ model 객체는 $ dataProvider의 내용에 속합니다. dataviewgrid는 두 번째 dataprovider 인 $ dataProviderMembers로 채워집니다. $ dataProviderMembers에 대한

$searchModel = new PeriodeClassSubjectMembersSearch(); 
     $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 

$modelPeriodeClassSubjectMembers = new PeriodeClassSubjectMembers(); 
     $dataProviderMembers = $modelPeriodeClassSubjectMembers->getPeriodeClassMembers($class_id, $periode_id, false); 
     $dataProviderMembers->key = 'id'; //set this to make the id column as value columns in the gridview for javascript getselectedrows instead of the gridrow number 
     return $this->render('viewmysubject', [ 
      'model' => $this->findModel($id), 
      'searchModel' => $searchModel, 
      'dataProvider' => $dataProvider, 
      'dataProviderMembers' => $dataProviderMembers 
     ]); 

모델 메도 :

<?= GridView::widget([ 
     'dataProvider' => $dataProviderMembers, 
     'columns' => [ 
      ['class' => 'yii\grid\SerialColumn'], 
      'id', 
      'firstname', 
      'lastname', 
      'member', 
      ['class' => 'yii\grid\CheckboxColumn', 'checkboxOptions' => function($model, $key, $index, $column){ 
       return ['checked' => 'member']; 
      }, 'header' => 'Mitglied' 
      ], 
      ] 
    ]); ?> 

컨트롤러 메도이 방법

$query = new Query(); 
     $query->select(..........); 

$dataProvider = new ActiveDataProvider([ 
    'query' => $query, 
]); 

return $dataProvider; 

은 체크 박스 필드는 correkt 작성되지 않았습니다.

일반 체크 박스 필드는 구성원에 대한 값을 더 $ 모델이 없다이 경우 세그먼트

return ['checked' => $model->member}; 

에 의해 채워집니다. $ model은 $ dataProvider의 데이터에 속합니다.

하지만 $ dataProviderMembers의 멤버 값이 표시됩니다. DataGrid의 확인란 필드 앞에있는 'member'열에서 볼 수 있듯이 데이터베이스의 값이 모눈에 올바르게 채워집니다. $ model을 사용하지 않고 checkbox 필드를 채우려면 어떻게해야합니까? SQL 쿼리의 'member'열 ($ dataProviderMembers의 멤버 값)의 값이 뒤에 있습니까? DataProvider에 다음 checkboxOptions에 대한 익명 함수에서 $ 모델 PARAM은 회원이 그래서 당신은 값을 얻을 수있는 값이 포함되어야 모델을 관련 $ dataProviderMembers 같다 당신의 gridview에서

return ['checked' => 'member']; 

답변

1

: 어떤 뭔가처럼 의미 > $ 부재 모델 -을 사용

 [ 'class' => 'yii\grid\CheckboxColumn', 
      'checkboxOptions' => function($model, $key, $index, $column){ 
      return ['value' => $model->member]; 
      }, 
     ], 

또는

DataProvider에 배열에게인지

 [ 'class' => 'yii\grid\CheckboxColumn', 
      'checkboxOptions' => function($model, $key, $index, $column){ 
      return ['value' => $model['member']]; 
      }, 
     ], 
+0

스피 $를 사용하는 모델 -> m 보통의 경우에 작동하는이 위치에 ember가 있는데, '객체가 아닌 속성을 얻으려고 시도하는 중'이라는 yii \ base \ ErrorException이 발생합니다. – Perino

+0

당신은 당신의 dataProvider가 $ dataProviderMembers이고 실제로 속성 멤버를 가지고 있습니까? 컨트롤러 액션 코드를 추가하십시오. – scaisEdge

+0

예, dataggridview는 $ dataProviderMembers로 올바르게 채워집니다. 나는 테스트 목적 (체크 박스 컬럼 이전의 컬럼)을 위해 생성 한 추가 컬럼 'member'에 적절한 멤버 값을 볼 수 있으며, 이제는 컨트롤러 함수의 주요 부분을 추가했다. – Perino