logo

বড় এপ্লিকেশনের মাইগ্রেশন ফাইল কিভাবে ম্যানেজ করব?

Q:
When i am developing a Laravel app from so many days, my database migration files become huge. and it looks bad more then 50 files in a folder. Is there any way to organize migration files?

যখন আমরা কোনও এপ্লিকেশনে লম্বা সময় ধরে কাজ করি তখন দেখা যায় আমাদের এপ্লিকেশনের ফিচার এড করতে করতে ডাটাবেসের টেবিলও অনেক বেড়ে যায়, ফলশ্রুতিতে মাইগ্রেশন ফাইলও অনেকগুলো হয় যা ম্যানেজ করা কঠিন হয়ে যায়। এজন্য আমরা আমাদের এপ্লিকেশন কে বিভিন্ন মডিউলে ভাগ করতে পারি যাতে ফিচার ভিত্তিক সমস্ত ফাইল একসাথে থাকে এবং মেইনটেইন করা সহজ হয়। এই মডিউল ভিত্তিক অর্গানাইজেশন আমরা নিজেরাই করতে পারি বা কোন প্যাকেজ (যেমন laravel-modules) ইউজ করেও এটি করতে পারি। কিন্তু যদি মডিউল এ ভাগ করা সম্ভব না হয় তাহলেও আমরা শুধু মাইগ্রেশন ফাইলগুলিকে নিজেদের মত সাজাতে পারি। একটি পদ্ধতি হল একই ফিচারের সব টেবিলের schema একটি মাইগ্রেশন ফাইলে রাখা। এভাবে যদি আমাদের এপ্লিকেশনে যদি এরকম দশটি ফিচার থাকে তাহলে দশটি মাইগ্রেশন ফাইলে আমরা টেবিলের schema গুলিকে সাজাতে পারি।

class CreateOrderRelatedTables extends Migration
{
    public function up()
    {
        Schema::create('orders', function (Blueprint $table) {
            // ...
        });
        Schema::create('order_lines', function (Blueprint $table) {
            // ...
        });
        Schema::create('invoices', function (Blueprint $table) {
            // ...
        });
    }
}

আর যদি আমরা প্রতিটি টেবিলের জন্য আলাদা আলাদা মাইগ্রেশন ফাইল রাখতে চাই তাহলে ফিচার ভিত্তিক ফোল্ডারে ফাইল গুলিকে সাজাতে পারি।

|--- database –┐
               |--- migrations –┐
                                |--- orders –┐
                                             |--- create_orders_table.php
                                             |--- create_invoices_table.php
                                |--- checkout –┐
                                               |--- create_carts_table.php
                                               |--- create_cart_items_table.php

উপরোক্ত ভাবে সাজানর ফলে আমরা আরও একটি সুবিধা পায় সেটা হলও ফিচার ভিত্তিক সব টেবিল কে মাইগ্রেট করানো। যেমন আমরা নীচের কমান্ড ইউজ করে শুধু orders এর সব টেবিলকে মাইগ্রেট করাতে পারি।

php artisan migrate --path 'database/migrations/orders'
আপনার মন্তব্যঃ
পোস্ট সম্পর্কে আপনার মতামত বা কোন ত্রুটি পেয়ে থাকলে নিচে জানাতে ভুলবেন না।