Laravel Syncronisasi Data Antara 2 Tabel (Looping)
Langkah-langkah dalam syncronisasi data antara 2 Tabel
- Select ke table A (beda koneksi)
$data = DB::connection('pgsql3')->select("SELECT * from karyawan");
- Delete tabel temp
$karyawan = Karyawan_YOHR_temp::all();
$karyawan->each->delete();
- Simpan ke tabel temp di looping dan di masukan ke array
foreach($data as $val) {
// echo 'data yohr-'.$val->username.PHP_EOL;
$array[] = [
'username' => $val->username
];
}
Karyawan_YOHR_temp::insert($array);
- Select ke tabel temp
$data2 = DB::select("SELECT * from karyawan_yohr_temp");
- Looping dan lakukan pengecekan ke tabel B Jika ada di Update Sedangkan jika tidak ada di Insert
foreach($data2 as $val) {
$count = DB::table('karyawan')
->where('username',$val->username)
->count();
if($count == 0) {
// echo $val->username.'-insert'.PHP_EOL;
$array2 = [
'username' => $val->username
];
Karyawan::insert($array2);
} else {
// echo $val->username.'-update'.PHP_EOL;
DB::table('karyawan')
->where('username', $val->username)
->update([
'employee_name' => $val->employee_name
]);
}
}
- Left join untuk mendapatkan data di tabel B yang tidak ada di tabel A
$data3 = DB::table('karyawan')
->select('karyawan.*')
->leftjoin('karyawan_yohr_temp', 'karyawan.username', 'karyawan_yohr_temp.username')
->where('karyawan_yohr_temp.id', null)
->get();
Kesimpulan :
Pada Proses ini dilakukan looping tabel A dan pengecekan ke tabel B, hasil pengecekan akan dilakukan Update jika ada dan Insert Jika belum ada, sedangkan untuk mengecek tabel B yang tidak ada di tabel A dilakukan left join
Kekurangan jika proses ini jika dilakukan akan terkena RTO jika data sangat banyak.
Komentar
Posting Komentar