Seed ไฟล์ sql ใน Laravel Database Seeding

Seed ไฟล์ sql ใน Laravel Database Seeding

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

สวัสดีครับผม อิทธิพัทธ์ (เป้) ชอบหาเทคนิคต่างๆที่ทำให้ชีวิต Programmer ง่ายขึ้น ทั้ง Automate, Library ชอบทำ Blog และ Video ถ้ามีเวลานะ!

ขอบคุณทุกคนที่ติดตาม และอ่านบทความของผมครับ ผมหวังว่าความรู้ที่เขียนขึ้นในเว็บไซต์นี้จะช่วยทุกท่านได้ไม่มากก็น้อย 

Scroll to Top