สอบถามการเรียกใช้ filterModel ใน GridView ต้องเรียกใช้ยังไงบ้างคับ

250 สังคมนักพัฒนาระบบ (Community)

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'layout'=>"{sorter}\n{pager}\n{summary}\n{items}",
    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],
        //.........
        ['class' => 'yii\grid\ActionColumn'],
    ],
]); 
?>

คือผมลองเรียกใช้ แล้วมันขึ้นแต่ค่าของตัวแปรที่ส่งมา แต่อยากให้ ขึ้นในส่วนของตัว filter ที่ใส่หรับกรองข้อมูลด้วยต้องทำอย่างไรบ้างครับ หรือต้องไป สร้างหรือกำหมด Model ต้องไหน ครับ  รูปภาพที่ใส่เป็นตัวอย่างที่มันต้องแสดงหนะครับ แต่ผมเรียกแล้วมันไม่มา 

คำตอบ/อธิบาย

มานพ กองอุ่น

มานพ กองอุ่น

ตอบเมื่อ แก้ไขล่าสุดเมื่อ 6 ก.ค. 2018, 17:16:22

[
'attribute' => 'category_id',
'filter' => ArrayHelper::map(Category::find()->all(), 'id', 'name'),
'value' => function($model){
return $model->category->name;
}
]

ประมาณนี้ครับ

ตอบเมื่อ

สอบถามเพิ่มเติมครับ ผมเขียนในลักษณะนี้ครับ

ส่วน Controller

  public function actionCheckup() {
      
        $sql2 = "SELECT     lab_head.vn,    lab_head.hn,lab_head.order_date,patient.cid,opdscreen.cc,
lab_head.lab_order_number,patient.fname,patient.lname FROM lab_head
LEFT JOIN opdscreen ON lab_head.vn = opdscreen.vn
LEFT JOIN patient ON opdscreen.hn = patient.hn
where patient.cid = '$test' ";
        $data2 = \yii::$app->db->createCommand($sql2)->queryAll();
                  $y = isset($_REQUEST['year'])?$_REQUEST['year']:date('Y');
               
        $dataProvider2 = new ArrayDataProvider([
            'allModels' => $data2
        ]);
         
        return $this->render('checkup',[
                  
                    'dataProvider2' => $dataProvider2
                
        ]);
    }


ส่วน view

 <?= GridView::widget([
      'dataProvider' => $dataProvider2,
      'filterModel' => $searchModel,
        'panel' => [
        'type'=>'success'
         ],
      
      'columns' => [
          ['class' => 'yii\grid\SerialColumn'],
                   
          ['label'=>'หมายเลขประจำตัวผู้ป่วย HN',
            'attribute'=>'hn',
              'headerOptions' => ['class'=>'text-center'],
              'contentOptions' => ['class'=>'text-center']
          ],
          ['label'=>'หมายเลขประจำตัวประชาชน CID',
              'attribute'=>'cid',
              'headerOptions' => ['class'=>'text-center'],
              'contentOptions' => ['class'=>'text-center']
          ],
          
          ['label'=>'วันที่รับการตรวจ',
            'attribute'=>'order_date',
              'format' => ['date','dd-MM-yyyy'],
              'headerOptions' => ['class'=>'text-center'],
              'contentOptions' => ['class'=>'text-center']
          ],
          
           ['label'=>'ชื่อ',
               'attribute'=>'fname',
              'headerOptions' => ['class'=>'text-center'],
              'contentOptions' => ['class'=>'text-center']
          ],          
          ['label'=>'สกุล',
              'attribute'=>'lname',
              'headerOptions' => ['class'=>'text-center'],
              'contentOptions' => ['class'=>'text-center']
          ],          
          
           ['label'=>'เหตุผลการรับการตรวจ',
            'attribute'=>'cc',
               'headerOptions' => ['class'=>'text-center'],
               'contentOptions' => ['class'=>'text-center']
          ],
           ['label'=>'Lab Order',
            'attribute'=>'lab_order_number',
                 'headerOptions' => ['class'=>'text-center'],
               'contentOptions' => ['class'=>'text-center']
          ],
           [
            'label'=>'ผลการตรวจ',
            'format'=>'raw',
            'value' => function($data){
                $laborder = $data['lab_order_number'];
                $url = "../web/index.php?r=site%2Fview&id=$laborder";
                $btn_edit = "<div class='btn btn-success' onclick=\"view('".$laborder."')\">ผลการตรวจ</div>";
                return Html::a($btn_edit,$url);
                
            }
        ]
          
      ],
        
  ]); ?>


จะส่งค่าหรือว่าเพิ่มคำสั่งส่วนไหนให้สามารถใช้งาน filter ได้ ครับ 

 

มานพ กองอุ่น

มานพ กองอุ่น

ตอบเมื่อ

คงต้องแปลงจาก SQL เป็น QueryBuilder ครับ สามารถสร้าง search model จาก lab_head แล้วค่อย join และใช้ filterWhere() ครับ