info('Memulai tarik data inisial (roll_no) dengan pencocokan pintar...'); // Ambil data student dari database lama yang memiliki roll_no $oldStudents = DB::table('lmsv2-old.students')->whereNotNull('roll_no')->get(); $bar = $this->output->createProgressBar(count($oldStudents)); $bar->start(); $successCount = 0; $failCount = 0; foreach ($oldStudents as $oldStudent) { // Ubah object ke array agar lebih aman saat mengecek keberadaan kolom (mencegah error jika kolom tidak ada) $old = (array) $oldStudent; $matchedUser = null; // PRIORITAS 1: Cocokkan berdasarkan Email (Paling Akurat) if (!empty($old['email'])) { $matchedUser = DB::table('lmsv2.users')->where('email', $old['email'])->first(); } // PRIORITAS 2: Jika email tidak cocok/kosong, cocokkan berdasarkan Nama if (!$matchedUser) { $query = DB::table('lmsv2.users'); // Cek apakah database lama menggunakan 'first_name' atau 'name' tunggal if (!empty($old['first_name'])) { $query->where('first_name', $old['first_name']); if (!empty($old['last_name'])) { $query->where('last_name', $old['last_name']); } } elseif (!empty($old['name'])) { // Jika DB lama hanya punya 1 kolom 'name' $query->where(DB::raw("CONCAT(first_name, ' ', COALESCE(last_name, ''))"), 'LIKE', "%{$old['name']}%"); } else { // Tidak ada indikator nama yang bisa dicari $query->where('id', '<', 0); // Force empty result } $matchedUser = $query->first(); } // JIKA KETEMU: Update tabel users yang baru if ($matchedUser) { DB::table('lmsv2.users') ->where('id', $matchedUser->id) // Update berdasarkan ID baru yang ditemukan ->update(['initial' => $old['roll_no']]); $successCount++; } else { $failCount++; } $bar->advance(); } $bar->finish(); $this->newLine(); $this->info("Selesai! Berhasil memetakan: {$successCount} data. Tidak ditemukan: {$failCount} data."); } }