HEX
Server: Apache
System: Linux WWW 6.1.0-40-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.153-1 (2025-09-20) x86_64
User: web11 (1011)
PHP: 8.2.29
Disabled: NONE
Upload Files
File: /var/www/ivs.kaunokolegija.lt/laravel/app/Imports/AlumnySheetOneImport.php
<?php

namespace App\Imports;

use App\Models\Alumny;
use App\Models\Department;
use App\Models\StudyProgram;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\SkipsErrors;
use Maatwebsite\Excel\Concerns\SkipsOnError;
use Maatwebsite\Excel\Concerns\ToCollection;

class AlumnySheetOneImport implements ToCollection, SkipsOnError
{
    use SkipsErrors;

    public function collection(Collection $rows)
    {
        function clean($value) {
            return isset($value) ? trim($value) : null;
        }
        
        foreach ($rows->skip(1) as $row) {
            $firstName = clean($row[0]);
            $lastName = clean($row[1]);
            $graduated = clean($row[2]);
            $departmentName = clean($row[3]);
            $studyProgramName = clean($row[4]);
            $phone = clean($row[5]);
            $email = clean($row[6]);

            $graduated = (preg_match('/^\d{4}$/', $graduated)) ? "{$graduated}-01-01" : null;

            if (!$firstName || !$lastName || !$graduated || !$email) continue;

            $fullName = trim("{$firstName} {$lastName}");
            $department = Department::firstOrCreate(['name' => $departmentName]);
            $studyProgram = StudyProgram::firstOrCreate(['name' => $studyProgramName]);

            $alumny = Alumny::updateOrCreate(
                ['name' => $fullName],
                [
                    'graduated' => $graduated,
                    'phone' => $phone,
                    'email' => $email
                ]
            );

            $alumny->faculties()->syncWithoutDetaching([$department->id]);
            $alumny->study_programs()->syncWithoutDetaching([$studyProgram->id]);
        }
    }
    
}