Files
lms-v2/app/Console/Commands/MigrateUserInitials.php
T
2026-05-30 22:15:16 +07:00

76 lines
2.8 KiB
PHP

<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
class MigrateUserInitials extends Command
{
protected $signature = 'lms:migrate-initials';
protected $description = 'Migrasi kolom roll_no dari tabel student lama dengan pencocokan Email / Nama karyawan';
public function handle()
{
$this->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.");
}
}