در این نوشته می خواهیم کدی که در نوشته لاراول – ایجاد کلاس مدل ایجاد کردیم را نخست به جدول های پایگاه داده نگاشت دهیم و سپس تغییری در کلاس ایجاد کرده و سپس این تغییرات تازه را نیز به درون پایگاه داده و مان جدول نگاشت دهیم. ولی پیش از این، می خواهیم با دو کلاس مدل پیش فرض لاراول به نام های users و password_reset آشنا شویم.

کلاس های مدل پیش فرض در لاراول

زمانی که دستور php artisan make:model ModelName -m را ایجاد می کنید، آن گزینه m- پایان دستور، فایلی در مسیر database/migrations ایجاد می کند که در نوشته لاراول – ایجاد کلاس مدل آن را آموزش دادیم. همراه با اجرای دستور، خود لاراول دو فایل دیگر برای دو جدول users و passeord_reset را ایجاد می کنند که در شکل زیر نشان داده شده است.

شکل زیر متد از کلاس فایل create_users_table را نشان می دهد. نخست کلیدی اصلی بوسیله ()bigIncrements تعریف شده است. سپس بوسیله متد ()string ستون name برای نگهداری نام کاربری تعریف شده است. ستون دیگر email است که چون می خواهیم نشانی ایمیل ها یکتا (Unique) باشد، پس متد ()unique را همانند زیر پس از متد ()string در تعریف ستون email به کار برده ایم.

می خواهیم ستونی داشته باشیم که تاریخ و ساعت فعال شدن کاربر بوسیله ارسال آدرس ایمیل را در جدول users نگهداری کنیم، پس ستون email_verified_at را بوسیله متد ()timestamp ایجاد کردیم و چون این ستون می تواند NULL باشد، پس متد دیگری به نام ()nullable را به کار برده ایم. بنابراین نتیجه می گیریم که اگر متد ()nullable را به کار نبریم، ستون به گونه NOT NULL تعریف می شود. بنابراین برای ستون های name و email حتما باید مقدار را وارد کنیم، چون NOT NULL هستند.

بر پایه ماهیت کلید اصلی که نمی تواند NULL باشد، پس نمی توانیم بوسیله یکی از متدهای ()bigIntIncrement یا ()increment برای ایجاد کلید اصلی متد ()nullable را به کار ببریم و همچنین نیازی ندارد که متد ()unique را به کار ببریم تا مقدارهای ستون کلید اصلی UNIQUE باشند، زیرا خود دو تابع گفته شده آن را به گونه UNIQUE تعریف می کنند.

()rememberToken در نوشته های پیش رو آموزش داده شده است

مفهوم Migration یا مهاجرت

Migration به زبان ساده یعنی نگاشت کلاس های مدل به جدول های پایگاه داده است. در این زمان، تنها یک پروژه ساده داریم که دو کلاس از پیش آماده و یک کلاس تازه به CreateStudentTable داریم، بنابراین پس از انجام مهاجرت سه جدول در پایگاه داده ای ایجاد می شود که نام آن را درون فایل env. مشخص کرده بودیم. در این زمان که یک پروژه تازه داریم، باید دستور زیر را اجرا کنید تا کلاس های مدل به جدول های پایگاه داده نگاشت داده شوند.

در شکل زیر نخست با دستور USE از MySQL پایگاه داده testdb را گزینش (انتخاب) کرده ایم. سپس همه جدول های آن را بوسیله SHOW TABLES نشان دادیم و می بینید که سه جدول users و password_reset و students ایجاد شده اند. سپس بوسیله دستور DESC (یا DESCRIBE) ساختار جدول users را نشان داده ایم. همانگونه که می بینید ستون id از گونه bigint unsigned است و نمی تواند NULL باشد و همچنین کلید اصلی و به گونه افزایش خودکار ایجاد شده است. ستون email نیز UNIQUE تعریف شده و همچنین نمی تواند NULL باشد ولی چون برای ستون email_verified_at، متد ()nullable را به کار بردیم، پس می تواند NULL باشد.

تغییر در ساختار پایگاه داده

مفهوم Migration تنها شامل ایجاد جدول های پایگاه داده از روی کلاس های مدل نمی شود، بلکه از آن برای تغییر در جدول ها نیز کمک گرفته می شود. در زیر برخی از تغییرهایی را که در ساختار جدول های پایگاه داده و بوسیله Migration می توان انجام داد را فهرست کرده ام. نخست باید کلاس مدل را تغییر دهیم، به بیان دیگر باید ویژگی های کلاس را تغییر دهیم و سپس این تغییر را به پایگاه داده اعمال کنیم.

  • فرض کنید می خواهید چندین ستون را به جدول از پیش موجود اضافه کنید، پس باید ویژگی هایی را در کلاس مدل نوشته و سپس دستور php artisan migarte:fresh را انجام دهید.
  • فرض کنید می خواهید چندین ستون را از جدول بردارید، پس باید ویژگی هایی را از کلاس مدل پاک کنید و سپس دستور php artisan migarte:fresh را انجام دهید.
  • فرض کنید می خواهید نام ستون یا گونه (نوع) یا اندازه آن را تغییر دهید، پس باید نخست تغییرها در کلاس مربوطه انجام شود و سپس دستور php artisan migarte:fresh را انجام دهید.

بنابراین پس از تغییر در ساختار یک یا چندین کلاس مدلی که از پیش نوشته بودید، باید دستور php artisan migrate:fresh را انجام دهید، تا این تغییرا از روی کلاس های مدل به هر کدام از جدول های متناظر آنها در پایگاه داده اعمال شوند. در نوشته پسین مفهوم Rollback را آموزش داده ایم.

در شکل زیر، دو ستون تازه به نام های gender از گونه ()enum و description از گونه ()text به کلاس افزوده ایم. متد ()text از لاراول برای ایجاد گونه TEXT در پایگاه داده به کار می رود. پس از اعمال تغییرها در کلاس، باید دستور php artisan migrate:fresh را اجرا کنید تا این تغییرها از کلاس به جدول مربوطه اعمال شوند. شکل زیر تغییر کلاس را نشان می دهد.

در شکل زیر ساختار جدول students پیش از و پس از تغییرات را می بینید. دو ستون gender و description به جدول افزوده شده اند. برای تغییر ساختار جدول باید محتاط باشید، زیرا شاید داده ها از دست بروند. اگر می خواهید جدول یا ستونی از جدول را پاک کنید، حتما پیش از آن، یک پشتیبان از داده ها ایجاد کنید.