Laravel จะมีฟังก์ชั่น Seeding สำหรับทำการ Mockup Data เพื่อเอาไว้ Test หรือเอาไว้สำหรับ เซตค่าเริ่มต้นให้กับระบบเช่น สร้าง Category, User, Province เป็นต้น โดยการ Seeding นั้นสามารถอ่าน Database: Seeding ได้เลย สำหรับใครที่ยังไม่รู้จักเดี๋ยวเรามาพูดถึงในบทความหน้ากันครับ
ทีนี้การ Seeing Database เนี่ยเราก็อาจจะต้องเขียน Seeder หรือ Factory Facker เพื่อทำข้อมูลหลอกๆแต่คราวนี้ถ้าข้อมูลของเราที่ต้องการเพิ่มใน Database เป็นข้อมูลจริงที่ Export ออกมาจาก Database เก่าเราจะต้องใช้วิธี DB::unprepared ซึ่งจะเป็นการนำไฟล์ .sql มาทำการ import ผ่าน Seeder เรามาดูวิธีการกัน
ขั้นแรกผมนำไฟล์ 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 แยกเพื่อความสะดวกแบบนี้ครับ