با بزرگتر شدن پروژه تان یا تغییر در نیازمندی ها، ممکن است نیاز به اضافه کردن یک ستون جدید به یک جدول موجود داشته باشید. به طور پیش فرض، هنگام استفاده از یک دیتابیس 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 به جدول خود نگاه می کنیم، می بینیم که به نتیجه مطلوب رسیده است:


اضافه کردن چندین ستون بعد از یک ستون خاص
توجه داشته باشید که ما همچنین می توانیم 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 و نسخه های بالاتر قابل استفاده است.
