پرش به مطلب اصلی

مایگریشن ها

در Doravel انتشار migration ها فقط یک vendor:publish ساده نیست. هر Feature فایل های Migration خودش را در یک رجیستری مرکزی ثبت می کند تا براساس تنظیمات پروژه، فقط migration های لازم منتشر شوند.

یادداشت

قواعد عمومی migration مثل naming، review، rollback، data conversion و production safety در Dornica Handbook نگه‌داری می‌شوند. این صفحه فقط رفتار اختصاصی Doravel برای ثبت، فیلتر و انتشار migrationها را توضیح می‌دهد.


Migration Registry چیست؟

MigrationRegistry یک رجیستری مرکزی است که هر ماژول، migration stub های خود را داخل آن ثبت می کند:

  • نام ماژول (مثل authentication یا file-manager)
  • مسیر stub ها
  • لیست migration ها
  • priority برای ترتیب انتشار

این رجیستری باعث می شود Doravel بتواند migration ها را:

  • ماژولار
  • قابل فیلتر
  • قابل همگام سازی
  • و قابل کنترل با config

منتشر کند.


دستور اصلی انتشار migration

php artisan dornica:publish-migrations

این دستور migration های ثبت شده در رجیستری را در مسیر database/migrations منتشر می کند.


گزینه های دستور

نمایش ماژول های قابل انتشار

php artisan dornica:publish-migrations --list

خروجی شامل نام ماژول ها، priority و تعداد migration هر ماژول است.

مشاهده برنامه انتشار بدون تغییر فایل ها

php artisan dornica:publish-migrations --dry-run

این حالت فقط برنامه اجرا را نشان می دهد و هیچ فایلی در database/migrations ایجاد/حذف/ویرایش نمی شود.

انتشار فقط ماژول های خاص

php artisan dornica:publish-migrations --module=authentication --module=authorization

جایگزینی کامل فایل های موجود

php artisan dornica:publish-migrations --force

اگر migration همنام از قبل وجود داشته باشد، حذف و فایل جدید ساخته می شود.

همگام سازی محتوای migration های موجود

php artisan dornica:publish-migrations --sync

در حالت sync:

  • اگر فایل همنام وجود نداشته باشد، فایل جدید ساخته می شود.
  • اگر وجود داشته باشد و محتوا یکسان باشد، skip می شود.
  • اگر وجود داشته باشد و محتوا متفاوت باشد، همان فایل موجود بروزرسانی می شود.

ترکیب گزینه ها

php artisan dornica:publish-migrations --module=core --sync
php artisan dornica:publish-migrations --module=core --sync --dry-run

ترتیب انتشار migration ها

ترتیب انتشار از priority هر ماژول تعیین می شود (عدد کمتر = زودتر). این موضوع برای جلوگیری از خطاهای وابستگی بین جدول ها مهم است.


ارتباط Migration Registry با config

برخی migration ها فقط وقتی در رجیستری ثبت می شوند که config مربوطه فعال باشد. یعنی حتی قبل از publish، تصمیم می گیرد چه migration هایی اصلا وارد رجیستری شوند.

نمونه های مهم:

  • dornica-app.regionalization.divisions
  • dornica-app.localization.enable
  • dornica-app.user_activity_polymorphic.tables

مثال: polymorphic user activity

کلید زیر تعیین می کند migration مربوط به تبدیل ستون های user activity منتشر شود یا نه:

'user_activity_polymorphic' => [
'tables' => [
'roles' => ['created_by', 'updated_by', 'deleted_by'],
],
],

اگر tables خالی باشد، migration این feature:

  • در رجیستری ثبت نمی شود
  • و در publish هم اصلا منتشر نمی شود

روند پیشنهادی در شروع پروژه

  1. ابتدا config ها را منتشر و تنظیم کنید.
  2. سپس migration ها را با دستور رجیستری منتشر کنید:
php artisan dornica:publish-migrations
  1. در نهایت migrate را اجرا کنید:
php artisan migrate