info('Memastikan Role (Hak Akses) tersedia di database...'); // Membuat role otomatis jika belum ada di tabel 'roles' Role::firstOrCreate(['name' => 'admin', 'guard_name' => 'web']); Role::firstOrCreate(['name' => 'trainer', 'guard_name' => 'web']); Role::firstOrCreate(['name' => 'trainee', 'guard_name' => 'web']); $this->info('Memulai pencocokan data Staff (Trainer)...'); $oldStaffs = DB::table('lmsv2-old.staff')->get(); $bar = $this->output->createProgressBar(count($oldStaffs)); $bar->start(); $successCount = 0; foreach ($oldStaffs as $staff) { $matchedUser = null; // Prioritas 1: Pencocokan Email if (!empty($staff->email)) { $matchedUser = User::where('email', $staff->email)->first(); } // Prioritas 2: Pencocokan Nama if (!$matchedUser && !empty($staff->name)) { $matchedUser = User::where(DB::raw("CONCAT(first_name, ' ', COALESCE(last_name, ''))"), 'LIKE', "%{$staff->name}%")->first(); } // Jika ketemu, tetapkan role-nya if ($matchedUser) { // assignRole() kini dijamin aman karena role sudah dibuat di awal script $matchedUser->assignRole(['trainer', 'trainee']); $successCount++; } $bar->advance(); } $bar->finish(); $this->newLine(); $this->info("Selesai! {$successCount} karyawan berhasil diperbarui sebagai Trainer."); } }