همونطور که میدونید لاراول با امکانات زیادی ظاهر شده. یکی از این امکاناتش migration و ایجاد نیاز های دیتابیس هست. این که شما میتونید با نوشتن چند کد به راحتی این کار رو انجام بدید و جداول و ستون های خودتون رو بسازید عالیه. ولی بعضی وقت ها یک سری اتفاقات، خطاها و چیز های مشابه اتفاق میفته که آدم رو عصبی میکنه. گفتم که با هم اینا رو بررسی کنیم. من راهکارهایی که میدم شاید جوابگو باشن، اما درست نباشن. پس اگر راهکار دیگه ای میدونید کامنت کنین که اضافه کنیم. ترفند اول: Cannot add foreign key constraint فرض کنید که یک migration نوشتید به این شکل: به نظر همه چیز درسته. یک ستون داریم که integer هست و مقادیر id در حدول users رو ذخیره میکنه و ما میخوایم relation بزنیم. اما این دستور رو که بزنید به شما این خطا رو میده: " Cannot add foreign key constraint " فقط همین. حرف دیگه ای هم نمیزنه. اما مشکل چیه؟ مشکل اینه که ستون id داخل جدول users به شکل autoincrement هست که این مدل ستون به صورت پیشفرض unsigned هست و نمیتونین ستون از جنس signed رو به یک ستون unsigned مرتبط کنین. به همین دلیل کد رو به این شکل تغییر میدیم و موضوع حل میشه. مورد دوم: افزودن ستون جدید به جدول موجود این مورد رو شاید با هر روشی بره. یک نفر rollback کنه و دوباره ایجاد کنه یا یک نفر refresh کنه. اما من کلا کار راحت رو ترجیح میدم. به نظرم بهتره یک migration جدا ایجاد کنیم. مثلا من میخوام یک ستون به جدول news اضافه کنم به اسم meta _ description . کار زیر رو انجام میدیم: به عبارت AddColumnMetaDescriptionToNewsTable دقت کنید. این یک عبارت معنا داره. میگه: یک ستون به اسم MetaDescription به جدول news اضافه کن. زمانی که این عبارت معنا دار رو بنویسید، لاراول خودش یک سری کدهای آماده داخل migration قرار میده. خروجی دستور بالا، کد زیر هست: حالا کافیه که متود up رو به شکل زیر تغییر بدید: حالا دستور migrate رو میزنیم و بدون هیچ مشکلی و از دست دادن اطلاعات داخل جدول، جدول به روز میشه. مورد دوم: عبارات معنا دار دیگر یک سری عبارات دیگه هم هست که برای کار با migration به درد میخورن: دستور اول برای شما یک جدول با پیشفرض های مناسب میسازه. دستور دوم هم معادل کاری که بالا انجام دادیم هست به شکل دیگه. مورد سوم: تغییر یک ستون و ویرایش اتفاق افتاده که شما یک ستون رو میخواین تغییر بدید و از نوع integer به string ببرید یا هر کار دیگه. خوب برای این کار اول باید dbal رو نصب کنید. حالا ایجاد migration خوب داخل متود up که ایجاد شده میریم و این کد رو میزاریم: هر تغییری که خواستم رو دادم. title رو به string تغییر دادم و طولش رو گذاشتم و اجازه دادم null باشه و در آخر با متود change تغییرات رو با migration آشنا کردم. حالا که migrate کنیم همه چیز به درستی تغییر میکنه. باز موردی بود بگید تا لیست رو کامل کنیم. ارادت