افزودن ستون جدید به جدول موجود در migration لاراول

با بزرگتر شدن پروژه تان یا تغییر در نیازمندی ها، ممکن است نیاز به اضافه کردن یک ستون جدید به یک جدول موجود داشته باشید. به طور پیش فرض، هنگام استفاده از یک دیتابیس SQL، یک ستون جدید در انتهای ستون های موجود اضافه می شود. با این حال، ممکن است ترجیح دهید ستون ها ترتیب خاصی داشته باشند. این کار به راحتی با استفاده از یک migration لاراول قابل انجام است.

در این مقاله، فرآیند اضافه کردن یک ستون جدید، به طور مثال ستون publisher، پس از ستون publish_date در جدولی به نام books را به شما آموزش می دهیم. با دنبال کردن مراحل ذکر شده در زیر، قادر خواهید بود به راحتی ترتیب ستون های جدول خود را مدیریت کنید.

مرحله 1: ایجاد یک migration

برای شروع، ترمینال خود را باز کنید و به پوشه پروژه لاراول خود بروید. سپس، دستور Artisan زیر را برای ایجاد یک فایل migration اجرا کنید:

php artisan make:migration add_publisher_column_to_books --table=books

دستوری که در بالا استفاده شد، یک فایل migration جدید در پوشه /database/migrations ایجاد می کند. از آنجایی که پارامتر --table=books را در دستور خود نوشته ایم، به طور خودکار نام جدول در شِمای فایل migration پر می شود.

مرحله 2: ویرایش فایل migration

فایل migration ایجاد شده را در مسیر /database/migrations پیدا و باز کنید. ستون جدید را داخل متد up از فساد Schema اضافه می کنیم. در اینجا از متد ->after() برای قرار دادن آن بعد از ستون publish_date استفاده می کنیم.

برای انجام این کار از کد زیر استفاده کنید:

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class AddPublisherColumnToBooks extends Migration
{
    public function up()
    {
        Schema::table('books', function (Blueprint $table) {
            $table->string('publisher')->after('publish_date');
        });
    }

    public function down()
    {
        Schema::table('books', function (Blueprint $table) {
            $table->dropColumn('publisher');
        });
    }
}

تغییرات ایجاد شده در فایل migration را ذخیره کرده و به ترمینال خود بازگردید.

مرحله 3: اجرای migration

اکنون، دستور زیر را برای اجرای migration و اضافه کردن ستون publisher در موقعیت دلخواه اجرا کنید:

php artisan migrate

این دستور خروجی زیر را باید داشته باشد:

اسکرین شات از خروجی اجرای migration در ترمینال با استفاده از artisan migrate

وقتی قبل و بعد از اجرای migration به جدول خود نگاه می کنیم، می بینیم که به نتیجه مطلوب رسیده است:

نمایی از جدول ما قبل از اجرای migration
نمایی از جدول ما قبل از اجرای migration
نمایی از جدول ما بعد از اجرای migration
نمایی از جدول ما بعد از اجرای migration

اضافه کردن چندین ستون بعد از یک ستون خاص

توجه داشته باشید که ما همچنین می توانیم migration را برای اضافه کردن چندین ستون در موقعیت دلخواه خود بنویسیم.

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class AddPublisherColumnToBooks extends Migration
{
    public function up()
    {
        Schema::table('books', function (Blueprint $table) {
            $table->string('publisher')->nullable()->after('publish_date');
            $table->string('edition')->nullable()->after('publisher');
            $table->string('language')->nullable()->after('edition');
        });
    }

    public function down()
    {
        Schema::table('books', function (Blueprint $table) {
            $table->dropColumn('publisher');
            $table->dropColumn('edition');
            $table->dropColumn('language');
        });
    }
}

توجه داشته باشید که در لاراول 8.27 و بالاتر با سینتکس کوتاه تری می توانیم این کار را انجام دهیم. در این روش فقط با یک بار فراخوانی ->after() چندین ستون را اضافه می کنیم. بنابراین، می توانیم از کد زیر برای دستیابی به همان نتیجه استفاده کنیم:

    // ...
    
    public function up(): void
    {
        Schema::table('books', function (Blueprint $table) {
            $table->after('publish_date', function ($table) {
                $table->string('publisher')->nullable();
                $table->string('edition')->nullable();
                $table->string('language')->nullable();
            });
        });
    }
    
    // ...

همانطور که می بینید، بجای اینکه تک تک از دستور after() برای هر ستون جدید استفاده کنیم، حالا می توانیم از یک دستور after() استفاده کرده و سپس داخل یک closure چندین ستون را تعریف کنیم. این روش در لاراول 8.27 و نسخه های بالاتر قابل استفاده است.

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *