Migration در لاراول چیست و چه کاربردهایی دارد؟

Migration در لاراول چیست و چه کاربردهایی دارد؟

نوشته شده توسط: تیم فنی نیک آموز
تاریخ انتشار: ۰۸ آبان ۱۴۰۳
آخرین بروزرسانی: 08 آبان 1403
زمان مطالعه: 9 دقیقه
۰
(۰)

 

Migration در لاراول یا مهاجرت‌ها برای مدیریت تغییرات پایگاه داده استفاده می‌شود. این قابلیت لاراول یک رویکرد سازمان‌یافته برای هم‌گام‌سازی دیتابیس و کدهای وب‌سایت یا برنامه ارائه می‌دهد. Migration در لاراول بهترین راه برای جلوگیری از تغییرات جداول به‌صورت دستی است؛ تغییراتی که با گسترش وب‌سایت و برنامه غیرقابل اجتناب هستند.

اما چه‌طور باید این Migrationها را ساخته و پیاده کنیم؟ ما در مقاله پیش‌رو به این سوال پاسخ داده و جزئیات دیگری را تشریح خواهیم کرد؛ مانند مفاهیم پایه در مهاجرت‌ها، اجرای آن‌ها، ویرایش و غیره.

Migration چیست؟ 

Migration یا مهاجرت در برنامه‌نویسی به فرآیند انتقال کد، داده یا کل برنامه از یک محیط به محیطی دیگر اشاره دارد.

ما برای درک عمیق مفهوم Migration در لاراول، در قالب یک مثال از اسباب‌بازی لگو این بخش را ادامه خواهیم داد. 

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

Migration در لاراول همان سطل‌های رنگی در لگو هستند. آن‌ها به سازمان‌دهی تمام بیت‌های مختلف داده در وب‌سایت مانند نام‌ها، تصاویر و حتی صوت‌ها کمک می‌کنند. به این ترتیب می‌توان برای هر نوع اطلاعات، سطل‌های (جدول) ویژه‌ای را در داخل یک جعبه بزرگ‌تر (پایگاه داده) ایجاد کرد.

۷ دلیل برای اهمیت استفاده از Migration در توسعه پایگاه داده

Migration در لاراول کاربردهای زیادی دارد که در ادامه هرکدام را نام برده و توضیح خواهیم داد. 

  1. مدیریت اسکیما در پایگاه داده

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

اسکیما یا “Schema” به طرح یا جداول پایگاه داده اشاره دارد. این ساختار حاوی اطلاعات جدول ازجمله ستون‌ها، انواع داده‌ها، دستورات شرطی و قوانین است.

  1. کنترل نسخه

مهاجرت‌ها در سیستم‌های کنترل نسخه مانند Git ردیابی می‌شوند. دلیل این کار اطمینان از اعمال تغییرات در پایگاه داده است. همچنین با کمک مهاجرت ها در لاراول، می‌توانیم مطمئن شویم که تغییرات در پایگاه داده می‌توانند به‌راحتی بررسی، برگشت یا در محیط‌های توسعه اعمال شوند.

  1. سادگی در جابه‌جایی پایگاه داده

با کمک اسکیما و Migration در لاراول، برنامه‌نویس‌ها می‌توانند یک‌بار تغییرات اسکیما را بنویسند و به‌راحتی بین دیتابیس‌های دیگر جابه‌جا شوند؛ دیتابیس‌هایی مانند MySQL، PostgreSQL، SQLite و SQL Server.

  1. بازگشت سریع از تغییرات و بازیابی آن‌ها

مهاجرت ها در لاراول ابزارهایی را برای بازگرداندن تغییرات و Reset آن‌ها در دیتابیس ارائه می‌دهند. با استفاده از این قابلیت، توسعه‌دهندگان امکانات زیر را خواهند داشت:

  • ریکاوری کدها پس از بروز خطا 
  • تنظیم اسکیما 
  • حفظ وضعیت پایدار دیتابیس
  1. ثبت رویداد ها و جزئیات آنها 

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

  1. ثبت تاریخچه و امکان کنترل بازگشت

لاراول مهاجرت‌های اجراشده را پیگیری می‌کند و محدودیت‌های بازگشتی (Rollback Limitations) را در اختیار توسعه‌دهندگان می‌گذارد. درنتیجه می‌توانند مطمئن باشند که مهاجرت‌ها در برنامه و فرآیند بازگردانی فایل‌ها، در اختیار و کنترل او هستند.

  1. تامین داده 

تامین داده‌های اولیه در لاراول “Seeding” و جمعیت داده در لاراول “Data Population” نام دارند. با استفاده از Migration در لاراول، می‌توان دیتابیس را با داده‌های اولیه به‌روش Seeding پر کرد. سپس آن را مانند یک مکمل ارزشمند، برای مهاجرت به دیتابیسی دیگر و حفظ یک‌پارچگی داده استفاده کرد. 

۵ مفهوم پایه مهاجرت‌ ها در لاراول

Migration در لاراول برخی مفاهیم پایه را دربرمی‌گیرد که در ادامه به آن‌ها اشاره می‌کنیم.

  1. up و down

در مهاجرت‌های لاراول، دو روش up و down داریم. روش up برای افزودن جداول، ستون‌ها یا پروفایل‌های جدید به پایگاه داده به‌کار می‌رود؛ درحالی‌که روش down عملیات انجام‌شده توسط روش up را معکوس کند.

  1. Force

برخی از عملیات Migration در لاراول مخرب هستند؛ به این معنی که ممکن است باعث از دست دادن اطلاعات برنامه‌نویسان شوند. برای محافظت از رخ دادن این موضوع، لاراول پیش از اجرای دستورات، از برنامه‌نویسان یک تاییدیه می‌گیرد. برای عدم نمایش این پیغام می‌توانید مهاجرت را به تولید اجبار کنید.

این عمل با دستور زیر انجام می‌شود:

 

php artisan migrate --force

 

  1. Index

ایندکس Migration در لاراول برای بهبود عملکرد کوئری پایگاه داده استفاده می‌شود. این مفاهیم پایه مهاجرت ها در لاراول به‌طور معمول به ستون‌هایی اضافه می‌شوند که از عبارات WHERE، شرط‌های JOIN یا ORDER BY استفاده کردند. 

  1. Middleware

Middleware در لاراول میان‌افزار شناخته می‌شود و مکانیزمی مناسب برای فیلتر کردن درخواست‌های ورودی HTTP به برنامه یا وب‌سایت است. یکی از مسئولیت‌های این مفهوم پایه، تایید کاربر است؛ به‌طوری‌که می‌توان با Middleware مشخص کرد که آیا کاربر احراز هویت شده است یا خیر؟ 

  1. Controller

کنترلرها می‌توانند منطق رسیدگی به درخواست مرتبط را در یک کلاس واحد گروه‌بندی کنند؛ یعنی به‌جای این‌که تمام منطق رسیدگی به درخواست برنامه را به‌عنوان یک Closures در فایل‌های مسیر تعریف کنید، می‌توانید با استفاده از کلاس‌های Controller، این فرآیند را سازمان‌دهی کنید. 

۴ قدم اجرای مهاجرت‌ ها در لاراول

اجرای مهاجرت ها در لاراول نیاز به ساخت آن‌ها دارد. در ادامه نحوه ساخت و اجرای مهاجرت ها را به‌صورت گام‌به‌گام در چهار مرحله توضیح خواهیم داد.

مرحله ۱: ایجاد یک مهاجرت

ابتدا با استفاده از دستور زیر، در محیط Artisan لاراول یک مهاجرت بسازید. 

 

make:migration Artisan

 

سپس ترمینال را باز و به دایرکتوری پروژه لاراول بروید. حال دستور زیر را اجرا کنید:

 

php artisan make:migration create_example_table

 

این دستور یک فایل مهاجرت جدید در دایرکتوری database/migrations با نامی مانند آیتم زیر ایجاد می‌کند:

2024_06_21_000000_create_example_table.php

این نام درواقع یک مهر زمانی روی فایل است که تضمین می‌کند مهاجرت‌ها به ترتیبی که ایجاد شده‌اند، اجرا خواهند شد.

مرحله ۲: تعریف اسکیما

فایل Migration جدید را با استفاده از یک ویرایش‌گر کد یا ویرایش‌گر خط فرمان باز کنید. دو متد در این فایل خواهید دید: up و down. 

متد up تغییراتی را که می‌خواهید در اسکیما دیتابیس اعمال کنید، تعریف خواهد کرد؛ مانند تعیین انواع داده‌ها و کنترل‌کننده‌ها. 

متد down نحوه معکوس کردن این تغییرات را مشخص می‌کند.

 

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateExampleTable extends Migration
{
    public function up()
    {
        Schema::create('example', function (Blueprint $table) {
            $table->id(); // Auto-incremental primary key
            $table->string('name'); // A string column
            $table->text('description')->nullable(); // A text column (nullable)
            $table->timestamps(); // Created_at and updated_at timestamps
        });
    }
    public function down()
    {
        Schema::dropIfExists('example');
        }}

 

مرحله ۳: اضافه کردن ستون‌ها به جدول

دستور زیر را بنویسید تا به جدول example، یک فایل مهاجرت جدید با ستونی جدید اضافه کند.

 

php artisan make:migration add_new_column_to_example_table --table=example

 

حال فایل مهاجرت جدید را باز کنید و دو متد up و down آن را به شکل زیر تغییر دهید:

 

use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class Add New Column To Example Table extends Migration { public function up() { Schema::table('example', function (Blueprint $table) { $table->string('new_column')->nullable(); // Adding a new column } public function down() { Schema::table('example', function (Blueprint $table) { $table->dropColumn('new_column'); // Dropping the added column }); }}

 

مرحله ۴: اجرای مهاجرت

برای اعمال مهاجرت و ایجاد جدول example در دیتابیس، دستور Artisan زیر را اجرا کنید:

 

php artisan migrate

 

این دستور تمام مهاجرت‌های قبلی و فعلی را اجرا می‌کند. 

ویرایش و اصلاح مهاجرت‌ ها

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

  1. افزودن به ایندکس

 

 use Illuminate\Database\Schema\Blueprint;
 use Illuminate\Support\Facades\Schema;
 Schema::table('users', function (Blueprint $table) {
 $table->index('email');
});

 

  1. تغییر نام ایندکس

 

۱. $table->renameIndex('email', 'mobile_no');

 

  1. حذف ایندکس

 

۱. $table->dropIndex('email');

 

  1. استفاده از محدودیت‌های کلید خارجی

 

$table->foreignId('id')

constrained('users')

cascadeOnUpdate()

cascadeOnDelete()
;

 

ریست و مهاجرت مجدد پایگاه داده 

ریست در مهاجرت‌ها با یک خط کد انجام می‌شود که آن را در ادامه خواهید دید.

 

php artisan migrate:reset

 

مهاجرت مجدد در پایگاه داده با Migration هم با دستور زیر پیاده‌سازی می‌شود.

 

php artisan migrate:refresh
// Refresh the database and run all database seeds...
php artisan migrate:refresh --seed

 

در لاراول، امکان مهاجرت مجدد به پایگاه داده فراهم است؛ یعنی می‌توانید تعداد محدودی از مهاجرت‌ها را به عقب برگردانید (Roll Back) و با افزودن کلیدواژه step به دستور refresh، مهاجرت را بازسازی کنید. 

برای مثال، دستور زیر پنج مهاجرت آخر را برمی‌گرداند و مهاجرت مجدد را ممکن می‌کند.

 

php artisan migrate:refresh –-step=5

 

تفاوت بین migrate:reset و migrate:refresh 

هر دو دستور برای ریست مهاجرت‌ها استفاده می‌شوند؛ اما تفاوت‌های ظریفی با یکدیگر دارند که در ادامه آن‌ها را بررسی خواهیم کرد.

 

  migrate:refresh migrate:reset
عملکرد
  • تمام جداول موجود در پایگاه داده را حذف و از صفر ساخت آنها را شروع می‌کند. 
  • سپس همه مهاجرت‌های را دوباره اجرا و به‌طور موثر ساختار پایگاه داده را بازسازی می‌کند.
  • بر بازگرداندن مهاجرت‌ها و جداول تمرکز دارد.
  • روش  down تمام مهاجرت‌ها را اجرا می‌کند تا همه آن‌ها با Rolling Back، به‌ترتیب و به‌شکل معکوس بازگردند.
کاربرد
  • شروع مجدد و بدون داده
  • آزمایش با پایگاه داده خالی
  • رفع مشکلات مهاجرت
  • بازگرداندن تغییرات

 

نکات کاربردی برای مهاجرت‌ها 

هر فایل مهاجرت ریزه‌کاری‌های خاص خود را دارد که در ادامه آن‌ها را بررسی خواهیم کرد.

  1. مهاجرت‌ ها را کوچک و مشخص نگه دارید

بهتر است چند فایل مهاجرت کوچک را به‌جای یک فایل مهاجرت بزرگ بسازید. این رویکرد در صورت بروز مشکلات، ردیابی و شناسایی آن‌ها را آسان‌تر می‌کند. هر فایل مهاجرت باید برای هدفی خاص نوشته و ایجاد شود تا ماهیت و کارکرد آن مشخص باشد.

  1. تغییرات را مستند کنید

در متد up فایل مهاجرت، کامنت‌های خودتان را بنویسید. در این کامنت‎ها توضیح دهید که این فایل مهاجرت چه کاری انجام می‌دهد. این اسناد در زمان همکاری با سایر برنامه‌نویسان و توسعه‌دهندگان، اهمیت بسیار زیادی پیدا می‌کنند؛ چراکه شما یا همکارانتان نیاز به درک تغییرات گذشته خواهید داشت.

  1. هر مهاجرت را آزمایش کنید

همیشه مهاجرت‌های خود را قبل از اعمال آن‌ها در دیتابیس آزمایش کنید. این عمل کمک می‌کند تا مشکلات را قبل از اینکه روی سیستم کاربر یا سرور تاثیر بگذارند، شناسایی کنید.

  1. طرح بازگشت را بسازید

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

  1. نسخه‌ های هر مهاجرت‌ را ثبت و ردیابی کنید

از یک سیستم کنترل نسخه مانند Git برای ردیابی مهاجرت‌های خود استفاده کنید. با این کار می‌توانید روی فرآیند توسعه وب‌سایت یا وب‌اپلیکیشن نظارت داشته باشید و فرآیند پیشرفت پروژه  را با همکاران ساده‌تر کنید.

آنچه در Migration در لاراول خواندیم

Migration در لاراول یک ابزار قدرت‌مند است که می‌تواند پروژه‌های توسعه وب را به میزان قابل توجهی ارتقا دهد. این قابلیت مدیریت پایگاه دیتابیس را ساده می‌کند، امکان کنترل نسخه را در اختیار برنامه‌نویس می‌گذارد. همچنین انعطاف‌پذیری برای جابه‌جایی بین سایر دیتابیس‌های متداول مانند MySQL و SQL Server توسط مهاجرت ها در لاراول ساده می‌شود. 

چه رتبه ای می‌دهید؟

میانگین ۰ / ۵. از مجموع ۰

اولین نفر باش

گوش به زنگ یلدا
title sign
معرفی نویسنده
تیم فنی نیک آموز
مقالات
401 مقاله توسط این نویسنده
محصولات
0 دوره توسط این نویسنده
تیم فنی نیک آموز
title sign
دیدگاه کاربران

close-image