Untuk kes ini, terdapat table profail yang menyimpan pelbagai maklumat pengguna dimana bukan semua pengguna mempunyai maklumat tersebut. Jadi, matlamatnya adalah untuk mengasingkan maklumat asas seperti name, email, nokp, email table profail ke table users dan kemaskini user_id pada table yang berkaitan.
Table users telah dicipta untuk mempunyai column name, email, nokp, password dan tidak mempunyai sebarang data. Data pada table users ini akan diambil dari table profail. Kemudian table users akan di isni dan user_id akan di update pada table yang berkaitan
Untuk tugasan ini kita akan menggunakan laravel migration. Hasilkan fail migration dengan jalankan command berikut:
php artisan make:migration get_users_details_from_profail_table --table=users
kemudian tambahkan kod berikut pada bahagian method up()
<?php
public function up(){ $tables = [ 'profail' => 'main', // must first because all users details is in here 'pendidikan' => 'ref', 'penempatan' => 'ref', 'perkhidmatan' => 'ref', ]; foreach ($tables as $table => $tableCategory) { $users = []; foreach (\DB::table($table)->get()->toArray() as $tableName) { if (!array_key_exists($tableName->nokp, $users)) { // check user exsit $user = \App\Models\User::where('nokp', $tableName->nokp)->first(); // if user exist get the id if ($user) { $users[$tableName->nokp] = $user->id; } // create user if not exist if (is_null($user)) { // if no record nama, skip, otherwise user recods will have no name if ($tableCategory == 'main') { $user = \App\Models\User::create([ 'name' => $tableName->nama, 'email' => \Illuminate\Support\Str::random(10) . '@gmail.com', 'nokp' => $tableName->nokp, 'password' => bcrypt('password'), 'email_verified_at' => \Carbon\Carbon::now(), ]); $users[$tableName->nokp] = $user->id; } } } if (isset($user->nokp)) { \DB::table($table) ->where('nokp', $user->nokp) ->update(['user_id' => $users[$tableName->nokp]]); } } }}
Amaran: Pastikan anda telah membuat backup database.
Kemudian, jalankan command berikut:
php artisan migrate
Oleh kerana task ini agak rumit, tiada fungsi rollback diperlukan. Jadi pastikan anda telah membuat backup database.
Jika anda ingin panduan tambah column user_id secara bulk, klik sini