ساخت Migration در Laravel

ساخت Migration در Laravel: راهنمای جامع

ساخت Migration در Laravel: راهنمای جامع

Laravel، فریم‌ورک محبوب PHP، ابزارهای قدرتمندی برای مدیریت ساختار پایگاه داده ارائه می‌دهد. Migrationها یکی از این ابزارها هستند که به شما امکان می‌دهند تغییرات ساختار پایگاه داده را به صورت نسخه‌بندی شده و قابل تکرار اعمال کنید. این مقاله به بررسی عمیق ساخت Migration در Laravel، کاربردها، مفاهیم کلیدی و بهترین روش‌ها می‌پردازد.

مقدمه‌ای بر Migrationها

Migrationها در اصل فایل‌های PHP هستند که شامل دستورالعمل‌هایی برای ایجاد، تغییر یا حذف جداول و ستون‌ها در پایگاه داده شما می‌باشند. به جای اینکه مستقیماً دستورات SQL را اجرا کنید، از Migrationها استفاده می‌کنید. این کار مزایای متعددی دارد:

  • نسخه‌بندی: هر تغییر در ساختار پایگاه داده به عنوان یک Migration جدید ثبت می‌شود. این امکان را فراهم می‌کند تا به راحتی به نسخه‌های قبلی بازگردید یا تغییرات را به صورت مرحله‌ای اعمال کنید.
  • همکاری تیمی: Migrationها به تیم‌های توسعه اجازه می‌دهند تا به طور هماهنگ ساختار پایگاه داده را تغییر دهند، بدون اینکه نگران تداخلات شوند.
  • استقرار آسان: Migrationها به شما امکان می‌دهند تا ساختار پایگاه داده را به همراه کد برنامه خود مستقر کنید.
  • قابلیت تکرار: می‌توانید Migrationها را چندین بار اجرا کنید، بدون اینکه نگران ایجاد خطا شوید.

ساخت یک Migration جدید

برای ایجاد یک Migration جدید، از دستور Artisan زیر استفاده کنید:

php artisan make:migration create_users_table

در این دستور، create_users_table نام Migration است. Laravel به طور خودکار یک فایل PHP در دایرکتوری database/migrations ایجاد می‌کند. نام فایل شامل تاریخ و زمان ایجاد Migration نیز خواهد بود. این نام‌گذاری به Laravel کمک می‌کند تا ترتیب اجرای Migrationها را تعیین کند.

همچنین می‌توانید از گزینه‌های دیگری برای ایجاد Migration استفاده کنید:

  • --create=table_name: برای ایجاد یک جدول جدید.
  • --table=table_name: برای تغییر یک جدول موجود.

به عنوان مثال، برای تغییر جدول posts، می‌توانید از دستور زیر استفاده کنید:

php artisan make:migration add_column_to_posts_table --table=posts

ساختار یک فایل Migration

یک فایل Migration معمولاً شامل دو متد اصلی است:

  • up(): این متد شامل دستورالعمل‌هایی برای اعمال تغییرات در پایگاه داده است. به عنوان مثال، ایجاد یک جدول جدید، اضافه کردن یک ستون، یا تغییر نوع داده یک ستون.
  • down(): این متد شامل دستورالعمل‌هایی برای بازگرداندن تغییرات اعمال شده توسط متد up() است. به عنوان مثال، حذف یک جدول، حذف یک ستون، یا بازگرداندن نوع داده یک ستون به حالت قبلی.

Laravel از یک شیء fluent به نام Schema برای تعریف ساختار پایگاه داده استفاده می‌کند. این شیء متدهایی را برای ایجاد و تغییر جداول و ستون‌ها ارائه می‌دهد.

مثال: ایجاد جدول Users

در اینجا یک مثال از یک فایل Migration برای ایجاد جدول users آورده شده است:

id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('users');
    }
};

در این مثال:

  • Schema::create('users', function (Blueprint $table) { ... });: یک جدول جدید به نام users ایجاد می‌کند.
  • $table->id();: یک ستون id (کلید اصلی) از نوع auto-increment ایجاد می‌کند.
  • $table->string('name');: یک ستون name از نوع string ایجاد می‌کند.
  • $table->string('email')->unique();: یک ستون email از نوع string ایجاد می‌کند و آن را به عنوان یک مقدار منحصر به فرد تعریف می‌کند.
  • $table->timestamp('email_verified_at')->nullable();: یک ستون email_verified_at از نوع timestamp ایجاد می‌کند و اجازه می‌دهد مقدار آن null باشد.
  • $table->string('password');: یک ستون password از نوع string ایجاد می‌کند.
  • $table->rememberToken();: یک ستون remember_token برای ذخیره توکن‌های یادآوری ایجاد می‌کند.
  • $table->timestamps();: دو ستون created_at و updated_at از نوع timestamp ایجاد می‌کند.
  • Schema::dropIfExists('users');: در متد down()، جدول users را در صورت وجود حذف می‌کند.

اجرای Migrationها

برای اجرای Migrationها، از دستور Artisan زیر استفاده کنید:

php artisan migrate

این دستور تمام Migrationهای موجود در دایرکتوری database/migrations را که هنوز اجرا نشده‌اند، اجرا می‌کند. Laravel به طور خودکار ترتیب اجرای Migrationها را بر اساس نام فایل آن‌ها تعیین می‌کند.

بازگرداندن Migrationها (Rollback)

برای بازگرداندن آخرین Migration اجرا شده، از دستور Artisan زیر استفاده کنید:

php artisan migrate:rollback

این دستور متد down() آخرین Migration اجرا شده را فراخوانی می‌کند و تغییرات آن را باز می‌گرداند.

برای بازگرداندن تعداد مشخصی از Migrationها، می‌توانید از گزینه --step استفاده کنید:

php artisan migrate:rollback --step=2

این دستور دو Migration آخر را باز می‌گرداند.

Reset کردن Migrationها

برای حذف تمام جداول پایگاه داده و اجرای مجدد تمام Migrationها، از دستور Artisan زیر استفاده کنید:

php artisan migrate:refresh

این دستور تمام جداول پایگاه داده را حذف می‌کند و سپس تمام Migrationها را اجرا می‌کند.

برای حذف تمام جداول و اجرای مجدد Migrationها بدون درخواست تایید، می‌توانید از گزینه --force استفاده کنید:

php artisan migrate:refresh --force

استفاده از Schema Builder

Laravel Schema Builder ابزارهای قدرتمندی برای تعریف ساختار پایگاه داده ارائه می‌دهد. برخی از متدهای مهم Schema Builder عبارتند از:

  • $table->increments('id');: ایجاد یک ستون auto-incrementing unsigned integer.
  • $table->bigIncrements('id');: ایجاد یک ستون auto-incrementing unsigned big integer.
  • $table->string('name', 255);: ایجاد یک ستون string با طول 255 کاراکتر.
  • $table->text('description');: ایجاد یک ستون text.
  • $table->integer('age');: ایجاد یک ستون integer.
  • $table->float('price', 8, 2);: ایجاد یک ستون float با 8 رقم کل و 2 رقم اعشار.
  • $table->boolean('is_active');: ایجاد یک ستون boolean.
  • $table->date('published_at');: ایجاد یک ستون date.
  • $table->timestamp('created_at');: ایجاد یک ستون timestamp.
  • $table->unique('email');: ایجاد یک ایندکس منحصر به فرد بر روی ستون email.
  • $table->index('name');: ایجاد یک ایندکس بر روی ستون name.
  • $table->foreign('user_id')->references('id')->on('users');: ایجاد یک کلید خارجی به جدول users.

بهترین روش‌ها

  • نام‌گذاری مناسب: از نام‌های توصیفی برای Migrationها استفاده کنید تا به راحتی بتوانید هدف آن‌ها را درک کنید.
  • تست Migrationها: قبل از استقرار Migrationها در محیط production، آن‌ها را در محیط development تست کنید.
  • استفاده از Schema Builder: از Schema Builder برای تعریف ساختار پایگاه داده استفاده کنید، زیرا این کار کد شما را خواناتر و قابل نگهداری‌تر می‌کند.
  • نگهداری از متد down(): همیشه متد down() را به درستی پیاده‌سازی کنید تا بتوانید تغییرات را به راحتی بازگردانید.

با استفاده از Migrationها در Laravel، می‌توانید ساختار پایگاه داده خود را به صورت منظم، نسخه‌بندی شده و قابل تکرار مدیریت کنید. این کار به شما کمک می‌کند تا فرآیند توسعه و استقرار برنامه خود را ساده‌تر و کارآمدتر کنید.