Hola !
Little question,
in Yii2 i have a table with thoses colums : ‘teacher’ - ‘testdate’
and i would count how many same ‘testdate’ i get for each 'teacher return something like this :
teacher1 - 03-06-2019 - 3
teacher2 - 03-06-2019 - 1
teacher2 - 04-06-2019 - 4
teacher4 - 03-01-2020 - 1
etc, etc,
Do you know how i should combine a foreach or what ’ Because i’m trying since 2 days now, with a foreach and some if/else, but i keep failiing… like having the last record not count or so…
my actual code :
public function actionRapports()
{
//rapports evaluateurs
$assures = Assures::find()->orderBy([‘ass_formateur’=>SORT_ASC,‘ass_date_test_mesure’=>SORT_ASC])->all();
//$count = Assures::find()->groupBy([‘ass_formateur’])->orderBy([‘ass_formateur’=>SORT_ASC,‘ass_date_test_mesure’=>SORT_ASC])->count();
/*
$eval = Assures::find()->groupBy([‘ass_formateur’])->all();
echo $count;
echo ‘
’;
//var_dump($assures);
foreach ($assures as $assure) {
# code…
echo $assure->ass_prenom.’
’;
}//die(); // ->groupBy('ass_formateur') */ $spreadsheet = new Spreadsheet(); $spreadsheet->getActiveSheet()->getPageSetup()->setPaperSize(\PhpOffice\PhpSpreadsheet\Worksheet\PageSetup::PAPERSIZE_A4); //$spreadsheet->getActiveSheet()->getPageSetup()->setOrientation(\PhpOffice\PhpSpreadsheet\Worksheet\PageSetup::ORIENTATION_LANDSCAPE); $spreadsheet->getActiveSheet()->getPageSetup()->setFitToWidth(0); $spreadsheet->getActiveSheet()->getPageSetup()->setFitToHeight(1); $spreadsheet->getActiveSheet()->getDefaultColumnDimension()->setWidth(12); $spreadsheet->getActiveSheet()->getDefaultRowDimension()->setRowHeight(30); $spreadsheet->getActiveSheet()->getColumnDimension('A')->setAutoSize(true); $spreadsheet->getActiveSheet()->getColumnDimension('B')->setAutoSize(true); $spreadsheet->getActiveSheet()->getColumnDimension('C')->setAutoSize(true); $spreadsheet->getActiveSheet()->getStyle('A2:C2')->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB('F2F2F2'); $sheet = $spreadsheet->getActiveSheet(); $sheet->setCellValue('A2', 'Evaluateur')->setCellValue('B2', 'Date mesure')->setCellValue('C2', 'Nombre de tests'); $row=3; $i = 0; // loop $oldevaluateur = ''; $oldmesure = ''; $nbtest = 1; $nbprof = 0; foreach ($assures as $assure) { if(!empty($assure->ass_formateur)){ $datemesure = $assure->ass_date_test_mesure; $evaluateur = $assure->ass_formateur; if($evaluateur == $oldevaluateur) { if($datemesure == $oldmesure) { $nbtest++; } else{ $sheet->setCellValue('A'.$row,utf8_encode($oldevaluateur)); //evaluateur $sheet->setCellValue('B'.$row,date('d-m-Y',strtotime($oldmesure))); $sheet->setCellValue('C'.$row,$nbtest); $oldevaluateur = $evaluateur; $oldmesure = $datemesure; $nbtest = 1; $row++; } } else { //info de l'évaluateur précédent si pas vide if(!empty($oldevaluateur)){ $sheet->setCellValue('A'.$row,utf8_encode($oldevaluateur)); //evaluateur $sheet->setCellValue('B'.$row,date('d-m-Y',strtotime($oldmesure))); $sheet->setCellValue('C'.$row,$nbtest); $oldevaluateur = $evaluateur; $oldmesure = $datemesure; $nbtest = 1; $row++; } $oldevaluateur = $evaluateur; $oldmesure = $datemesure; $nbprof++; } } else { $sheet->setCellValue('A'.$row,utf8_encode($oldevaluateur)); //evaluateur $sheet->setCellValue('B'.$row,date('d-m-Y',strtotime($oldmesure))); $sheet->setCellValue('C'.$row,$nbtest); } } $titre = 'Rapports Evaluateurs SDE '.$nbprof; $sheet->setCellValue('A1', $titre); $filename = "SDE_inlingualeman_rapport_evaluateurs".".xls"; header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="'.$filename.'"'); header('Cache-Control: max-age=0'); // If you're serving to IE 9, then the following may be needed header('Cache-Control: max-age=1'); $writer = new Xlsx($spreadsheet); //$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx'); $writer->save('php://output'); // Yii::$app->getSession()->setFlash('success', Yii::t('app', 'Rapport exporté.')); //return $this->redirect('site/index'); }
Kind regards,