ใช้งาน 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


Processed Time: 0.02726 Seconds