My code:
public function export(Request $request)
{
$classroom = Classroom::with('grade')->where('id',$request->input('classroom'))->firstOrFail();
$attendances = Attendance::where('classroom_id', $classroom->id)
->whereYear('attendance_date', 2021)
// ->whereMonth('attendance_date', Carbon::now()->month)
->get()
->groupBy(function($item) {
return Carbon::parse($item->attendance_date)->format('m');
});
$data = $attendances;
$filename = Str::title($classroom->grade->grade_name).' - ('.$classroom->class_year->format('Y').' ).xlsx';
return (new AttendanceExport($data))->download($filename, \Maatwebsite\Excel\Excel::XLSX);
}
Error throwing on this line:
return (new AttendanceExport($data))->download($filename, \Maatwebsite\Excel\Excel::XLSX);
MY AttendanceExport looks like:
<?php
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithStrictNullComparison;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromArray;
use Maatwebsite\Excel\Concerns\WithMultipleSheets;
class AttendanceExport implements WithMultipleSheets
{
use Exportable;
protected $data;
public function __construct($data)
{
$this->data = $data;
}
public function sheets(): array
{
$sheets = [];
for ($month = 1; $month <= 12; $month++) {
$padded_month = sprintf("%02d", $month);
$currentMonthData = $this->data[$padded_month];
$sheets[] = new AttendanceExportPerMonthSheet($currentMonthData);
}
return $sheets;
}
}
and AttendanceExportPerMonthSheet is:
<?php
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithStrictNullComparison;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromArray;
class AttendanceExportPerMonthSheet implements FromCollection, WithHeadings, WithStrictNullComparison
{
use Exportable;
protected $data;
public function __construct($data)
{
$this->data = $data;
}
public function headings(): array
{
$heading['name'] = 'Student Name';
$totalDateArr = $this->data->unique('attendance_date')->pluck('attendance_date')->sort();
foreach($totalDateArr as $v){
$current_day = \Carbon\Carbon::parse($v)->format('d');
$heading[$current_day] = $current_day;
}
return $heading;
}
public function collection()
{
$attendances = $this->data->groupBy('student_id');
$result = [];
foreach($attendances as $k => $studentAttendanceArr){
$row = [];
$row['name'] = 'Name';
foreach($studentAttendanceArr as $sk => $v){
$row[\Carbon\Carbon::parse($v->attendance_date)->format('d')] = $v->present_status ? 'yes': 'no';
}
$result[] = $row;
}
return $result;
}
}
Please, let me know if I should provide dd() of any value.