Laravel Database Part-2: Seeding

Laravel Database Seeding
Laravel Database Seeding

লারাভেল ফ্রেমওয়ার্ক এ Seeding বা Seeder কি?

Laravel Framework এ seeding হচ্ছে একটি স্বয়ংক্রিয় প্রক্রিয়া যা একটি অ্যাপ্লিকেশনের প্রাথমিক তথ্য (sample data) insert এর জন্য চালানো হয়। লারাভেল ফ্রেমওয়ার্ক এই কাজটি seeder class গুলোর মাধ্যমে করে থাকে। যদিও আপনি এটি Laravel Migration এর মাধ্যমে করতে পারেন কিন্তু এটি একটি bad practice. কারণ আপনি যত বার Migration run করবেন প্রত্যেক বারই একই স্যাম্পল Data আপনার টেবিল এ Insert হবে , যেটি আপনার প্রোডাকশন ডাটাকে interfere করবে। তা ছাড়া seeder class গুলোর মাধ্যমে আপনি স্যাম্পল ডাটা insert এর কাজটি প্রত্যেকটি টেবিল এর জন্য আলাদা আলাদা ভাবে করতে পারবেন। সব seed class ই database/seeds ফোল্ডারে সংরক্ষিত থাকে। seed ক্লাস গুলোকে আপনি যেকোনো নামে রাখতে পারেন। তবে কিছু convention ফলো করা উচিত, যেমন: UsersTableSeeder ইত্যাদি। বাই ডিফল্ট Laravel আপনার জন্য DatabaseSeeder class টি ডিফাইন করে রেখেছে। আর এই class এর call() Method দিয়ে অন্যান্য seed class গুলোকে run করতে পারেন এবং seeding অর্ডার কন্ট্রোল করতে পারবেন।

লারাভেল এ কিভাবে Seeder Generate করবেন?

Seeder Generate করার জন্য আপনাকে Laravel Artisan Command make:seeder এই কমান্ড টি রান করতে হবে। নিচে লক্ষ্য করুন:

php artisan make:seeder UsersTableSeeder
Generating Laravel Seeder
Generating Laravel Seeder

এখন আপনি database/seeds ফোল্ডারে আপনার seeder class টি দেখতে পাবেন ঠিক নিচের মতো :

Laravel Seeder Class Location
Laravel Seeder Class Location
<?php

use Illuminate\Database\Seeder;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //
    }
}

কিভাবে একটি টেবিল এ dummy data Insert করার জন্য Seeder লিখবেন?

Seeder class এ শুধু মাত্র run নামে একটি default Method থাকবে , এই run মেথডের মাধ্যমেই আপনার Database এ Dummy Data Insert করতে হবে। আর এর জন্য আপনি Laravel এর Query Builder এর insert() Method ব্যবহার করতে পারেন। নিচে লক্ষ্য করুন :

<?php

use Illuminate\Database\Seeder;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //
        $users=[[
            'name' => str_random(10),
            'email' => str_random(10).'@gmail.com',
            'password' => bcrypt('secret'),
        ],
        [
            'name' => str_random(10),
            'email' => str_random(10).'@gmail.com',
            'password' => bcrypt('secret'),
        ],
        [
            'name' => str_random(10),
            'email' => str_random(10).'@gmail.com',
            'password' => bcrypt('secret'),
        ]];
        
         DB::table('users')->insert($users);
    }
}

Seeder কিভাবে রান করবেন?

seeder লেখার পর এটি রান করার জন্য আপনাকে Composer autoloader কে dump-autoload command এর মাধ্যমে regenerate করতে হতে পারে।

composer dump-autoload

Output

Laravel Dump Autoload
Laravel Dump Autoload

autoload file গুলো regenerate হয়ে যাওয়ার পর, এখন আপনি চাইলে db::seed command এর মাধ্যমে সব গুলো seeder class রান করতে পারেন। এক্ষেত্রে অতিরিক্ত seeder class গুলো রান করার জন্য আপনাকে DatabaseSeeder class এর run() Method এর মধ্যে call() Method দিয়ে সব গুলো seed Class কে কল করে রাখতে হবে। নিচের উদাহরণ দেখুন:

/**
 * Run the database seeds.
 *
 * @return void
 */
public function run()
{
    $this->call([
        UsersTableSeeder::class,
        PostsTableSeeder::class,
        CommentsTableSeeder::class,
    ]);
}

তারপর নিচের artisan command টি রান করতে হবে।

php artisan db:seed

আর যদি প্রত্যেকটি table এর আলাদা seeder রান করতে চান সে ক্ষেত্রে আপনাকে db::seed –class=YourSeederClassName command এর মাধ্যমে প্রত্যেকটি table এর আলাদা seeder রান করতে পারেন।

php artisan db:seed --class=UsersTableSeeder

Sample Dummy Data

Sample Dummy Data Using Laravel Seeder Class
Sample Dummy Data Using Laravel Seeder Class

আমি মাসুদ আলম, বাংলাদেশের ৩৬ তম Zend Certified Engineer । ২০০৯ সালে কম্পিউটার সাইন্স থেকে বেচেলর ডিগ্রী অর্জন করি। দীর্ঘ ১৫ বছর আমি Winux Soft, SSL Wireless, IBCS-PRIMAX, Max Group, Canadian International Development Agency (CIDA), Care Bangladesh, World Vision, Hellen Keller, Amarbebsha Ltd সহ বিভিন্ন দেশি বিদেশী কোম্পানিতে ডেটা সাইন্স, মেশিন লার্নিং, বিগ ডেটা, ওয়েব ডেভেলপমেন্ট এবং সফটওয়্যার ডেভেলপমেন্ট এর উপর বিভিন্ন লিডিং পজিশন এ চাকরি এবং প্রজেক্ট লিড করি। এছাড়াও বাংলাদেশের ১৮৫ জন জেন্ড সার্টিফাইড ইঞ্জিনিয়ার এর মধ্যে ১২০ এরও অধিক ছাত্র আমার হাতে জেন্ড সার্টিফাইড ইঞ্জিনিয়ার হয়েছেন। বর্তমানে w3programmers ট্রেনিং ইনস্টিটিউট এ PHP এর উপর Professional এবং Advance Zend Certified PHP -8.2 Engineering, Laravel Mastering Course with ReactJS, Python Beginning To Advance with Blockchain, Machine Learning and Data Science, Professional WordPress Plugin Development Beginning to Advance কোর্স করাই। আর অবসর সময়ে w3programmers.com এ ওয়েব টেকনোলজি নিয়ে লেখালেখি করি।

One thought on “Laravel Database Part-2: Seeding

  1. ভাই আমি দুইটা বা তিনটা পোজেক্ট একসাথে একটা পোজেক্ট বানাতে চায়। সেক্ষেত্রে কিভাবে করলে সুবিধা হবে?

Leave a Reply