MigrAlign اختلاف مایگریشنها با دیتابیس واقعی رو پیدا میکنه
خلاصهٔ کاملتر
MigrAlign یه پکیج لاراوله که یه مشکل آشنا رو هدف گرفته: schema drift — یعنی همون فاصلهای که بین فایلهای migration شما و وضعیت واقعیِ دیتابیس باز میشه، وقتی یه نفر مستقیم رو جدولها دست میبره، یه مایگریشن رو رد میکنه، یا محیطهای مختلف از هم جدا میافتن.
طرز کارش اینه که نیتِ شما رو از فایلهای مایگریشن میخونه — یعنی فراخوانیهای Schema::create() و Schema::table() رو اسکن میکنه — و بعد اسکیمای زنده رو از information_schema روی MySQL یا MariaDB میخونه. تفاوتِ این دوتا میشه یه مجموعه تغییر پیشنهادی که قبل از اجرا میتونی کامل پیشنمایشش رو ببینی:
php artisan migralign:sync --dry-runمهمترین ایدهی پکیج اینه که همهی تغییرها رو یهجور اعمال نمیکنه، بلکه هر کدوم رو بر اساس میزان خطرش توی یکی از سه دسته میذاره. تغییرات امن (Safe) مثل اضافه کردن ستون nullable یا بزرگتر کردن سایز یه ستون؛ تغییرات پرخطر (Risky) مثل کوچیک کردن یه نوع داده یا تبدیل ستون از nullable به not-null؛ و تغییرات مخرب (Destructive) مثل drop کردن ستون یا جدول.
این دستهبندی یه فایدهی عملیِ مهم داره: اگه auto_apply_safe روشن باشه، تغییرات امن خودکار اعمال میشن، ولی تغییرات پرخطر و مخرب قبل از اینکه MigrAlign دست به دیتابیس بزنه ازت تأیید میگیرن — پس یه drop فراموششده بیسروصدا و بدون نظارت اجرا نمیشه.
میتونی دامنهی یه sync رو هم به یه جدول یا یه مایگریشن خاص محدود کنی (با فلگهایی مثل --table یا --migration) بهجای اینکه کل اسکیما رو بررسی کنه، که وقتی فقط میخوای یه بخش رو هماهنگ کنی بهکار میاد. بعد از هر اجرا هم MigrAlign وضعیت هر تغییر رو گزارش میده: اعمالشده، ردشده، در انتظار، یا خطادار.
نصبش با Composer انجام میشه و فایل کانفیگش کنترل میکنه که کدوم مسیر مایگریشن خونده بشه، کدوم جدولها نادیده گرفته بشن و آیا تغییرات امن خودکار اعمال بشن یا نه. این پکیج PHP 8.2+ میخواد (روی Laravel 13 نسخهی ۸.۳+) و از لاراول ۱۱، ۱۲ و ۱۳ پشتیبانی میکنه. فقط حواست باشه که فعلاً فقط با MySQL و MariaDB کار میکنه و مایگریشنهایی که منطق خیلی پویا دارن ممکنه هنوز بازبینی دستی لازم داشته باشن.
نکات کلیدی:
- MigrAlign فاصلهی بین فایلهای migration و اسکیمای واقعیِ دیتابیس (schema drift) رو پیدا میکنه
- نیت رو از Schema::create()/Schema::table() میخونه و با information_schema مقایسه میکنه
- هر تغییر رو به سه دستهی امن، پرخطر و مخرب تقسیم میکنه
- تغییرات امن خودکار اعمال میشن ولی drop ستون/جدول حتماً تأیید میخواد
- فقط MySQL و MariaDB رو پشتیبانی میکنه و به PHP 8.2+ و لاراول ۱۱ تا ۱۳ نیاز داره




