Cara tambah column baru pada beberapa table secara bulk

Untuk kes ini, terdapat table pada database yang menggunakan nokp sebagai foreign key pada setiap table. Dalam situasi ini, kita akan menambah column user_id (yang akan mempunyai relation dengan user table) bagi menggantikan column nokp pada beberapa table secara bulk.

Untuk tugasan ini kita akan menggunakan laravel migration. Hasilkan fail migration dengan jalankan command berikut:

php artisan make:migration add_user_id_to_multiple_table --table=users

kemudian tambahkan kod berikut pada bahagian method up()


<?php

function up()
{
    $tables = ['pendidikan' => 'user_id',        'penempatan' => 'user_id',        'perkhidmatan' => 'user_id',        'profail' => 'user_id',];
    foreach ($tables as $table_name => $column_name) {
        if (!Schema::hasColumn($table_name, $column_name)) {
            Schema::table($table_name, function (Blueprint $table) use ($column_name) {
                $table->foreignId($column_name)->nullable()->constrained();
            });
        }
    }
}

 

$table merujuk kepada table yang ingin ditambah column user_id. Jika table berkenaan belum mempunyai column user_id, maka kod ini akan menambah column berkenaan. Kemudian, jalankan command berikut:

php artisan migrate

Jika terdapat error, besar kemungkinan DataType id pada table user tidak sama degan DataType foreign key. Contoh jika DataType id pada table user adalah BIGINT pastikan DataType foreign key juga adalah BIGINT

Jika anda ingin mengundurkan balik perubahan yang telah dibuat, tambahkan kod berikut pada method down()

public <?php

function down()
{
    $tables = ['pendidikan' => 'user_id',        'penempatan' => 'user_id',        'perkhidmatan' => 'user_id',        'profail' => 'user_id',];
    Schema::disableForeignKeyConstraints();
    foreach ($tables as $table_name => $column_name) {
        if (Schema::hasColumn($table_name, $column_name)) {
            Schema::table($table_name, function (Blueprint $table) use ($table_name, $column_name) {
                $table->dropForeign("{$table_name}_{$column_name}_foreign");
                $table->dropColumn($column_name);
            });
        }
    }
    Schema::enableForeignKeyConstraints();
}

Selepas itu, jalankan command berikut

php artisan migrate:rollback

Jika anda ingin panduan kemaskini user_id secara bulk, klik sini.

Post a Comment

Previous Post Next Post