Laravel จะมีฟังก์ชั่น Seeding สำหรับทำการ Mockup Data เพื่อเอาไว้ Test หรือเอาไว้สำหรับ เซตค่าเริ่มต้นให้กับระบบเช่น สร้าง Category, User, Province เป็นต้น โดยการ Seeding นั้นสามารถอ่าน Database: Seeding ได้เลย สำหรับใครที่ยังไม่รู้จักเดี๋ยวเรามาพูดถึงในบทความหน้ากันครับ

ทีนี้การ Seeing Database เนี่ยเราก็อาจจะต้องเขียน Seeder หรือ Factory Facker เพื่อทำข้อมูลหลอกๆแต่คราวนี้ถ้าข้อมูลของเราที่ต้องการเพิ่มใน Database เป็นข้อมูลจริงที่ Export ออกมาจาก Database เก่าเราจะต้องใช้วิธี DB::unprepared ซึ่งจะเป็นการนำไฟล์ .sql มาทำการ import ผ่าน Seeder เรามาดูวิธีการกัน

Folder Structure

ขั้นแรกผมนำไฟล์ provinces.sql ใส่ไปที่ folder database\seeds หรือสามารถสร้าง folder sql ด้านนอกก็ได้ตามสะดวกครับจากนั้นทำการสร้างไฟล์ ProvinceTableSeeder.php ผ่านคำสั่ง

php artisan make:seeder ProvinceTableSeeder

จากนั้นในไฟล์ ProvinceTableSeeder ใส่ Code ดังนี้

public function run() {
      DB::unprepared(File::get(database_path('seeds/provinces.sql')));
}

ตรง seeds/provinces.sql ให้ทำการเปลี่ยนเป็น path ที่เราสร้าง folder ไว้ครับ

หลังจากนั้นกลับไปที่ไฟล์ DatabaseSeeder เพื่อทำการ import Class และเรียกใช้งาน ProvinceTableSeeder ตามนี้

<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder {
    public function run() {
        $this->call(ProvinceTableSeeder::class);
    }
}

หลังจากนั้นสามารถสั่งรัน Seeder ด้วยคำสั่ง

php artisan db:seed

หรือจะ Seeding พร้อมกับตอน Migrate Database ก็ได้เช่นเดียวกันด้วยคำสั่ง

php artisan migrate:refresh --seed
// or
php artisan migrate:fresh --seed
// or
php artisan migrate --seed

ปล. หลายคนอาจจะนำ DB::unprepared ไปใส่ที่ไฟล์ DatabaseSeeder.php เลยก็ได้ครับไม่จำเป็นต้องสร้างไฟล์ตามผมก็ได้ แต่ที่ผมทำเพราะบางครั้งเราต้องการ Clean Database หลัง Import จึงต้องสร้าง Class Seeder แยกเพื่อความสะดวกแบบนี้ครับ

ตัวอย่างการ Clean Database หลัง Seeder

เกี่ยวกับผู้เขียน

Itthipat Thitsarak

สวัสดีครับผม อิทธิพัทธ์ (เป้) เป็น Freelance Web developer ชอบหาเทคนิคต่างๆที่ทำให้ชีวิต Programmer ง่ายขึ้นโดย Blog นี้จะ สอน Laravel, Vuejs, CSS, HTML 5 และอื่นๆ ที่เกี่ยวกับการทำเว็บไซต์

ขอบคุณทุกคนที่ติดตาม และอ่านบทความของผมครับ หากใครมีคำถามหรืออยากให้ผมเขียนเกี่ยวกับเรื่องอะไรเพิ่มเติม สามารถแสดงความคิดเห็นไว้ที่ใต้บทความ หรือส่งเรื่องเข้ามาที่ Email ได้เลยครับ หัวข้อไหนน่าสนใจ ผมจะหยิบมาเขียนบทความให้ได้อ่านกันเรื่อยๆครับ

Scroll to Top
Scroll to Top