tutor4dev

คอร์สอบรม, บทความ และ คลิปวีดีโอ การพัฒนาเว็บแอพพลิเคชั่น

ใช้งาน DB Seeder และ Model Factory


ในการพัฒนา Database Web App การมีข้อมูลทดสอบหรือ Dummy Data มีความจำเป็นพอสมควร หากมีข้อมูลทดสอบไม่มากพอ ก็อาจทำให้การทดสอบต่างๆ ในการเขียน Web App บกพร่องตามไปด้วย Laravel ได้มีตัวช่วยที่ชื่อ DB Seeder ให้ใช้งานมาตั้งแต่ใน Laravel Version เก่า แต่ใน Version 5.1.x Laravel ได้เพิ่ม Model Factory ซึ่งยิ่งทำให้การ Seed ข้อมูลทดสอบเข้าสู่นฐานข้อมูลนั้นง่ายยิ่งขึ้นไปอีก

ใช้งาน DB Seeder

database/seeds/DatabaseSeeder.php

class DatabaseSeeder extends Seeder
{
    public function run()
    {
        Model::unguard();

        // $this->call(UserTableSeeder::class);
        $this->command->info('Hello World');

        Model::reguard();
    }
}

พิมพ์คำสั่งที่ Terminal

php artisan db:seed

สร้างไฟล์ Seeder สำหรับ Table Customer

พิมพ์คำสั่งที่ Terminal

php artisan make:seeder CustomerTableSeeder

composer dump-autoload

database/seeds/CustomerTableSeeder.php

class CustomerTableSeeder extends Seeder
{
    public function run()
    {
        $faker = Faker\Factory::create();

        $customer = [
            'name' => $faker->name,
            'email' => $faker->email
        ];

        \DB::table('customers')->insert($customer);
    }
}

ใช้งาน DB Seeder กับ CustomerTableSeeder

database/seeds/DatabaseSeeder.php

class DatabaseSeeder extends Seeder
{
    public function run()
    {
        Model::unguard();

        $this->call(CustomerTableSeeder::class);

        Model::reguard();
    }
}

พิมพ์คำสั่งที่ Terminal

php artisan db:seed

ใช้งาน Model Factory

database/factories/ModelFactory.php

$factory->define(App\Customer::class, function (Faker\Generator $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->email,
    ];
});

database/seeds/CustomerTableSeeder.php

class CustomerTableSeeder extends Seeder
{
    public function run()
    {
        factory('App\Customer', 10)->create();
    }
}

พิมพ์คำสั่งที่ Terminal

php artisan db:seed

Code ตัวอย่างในบทความนี้ถูกทดสอบบน Laravel 5.2.x