Migration เป็นไฟล์ข้อมูลที่เกี่ยวกับโครงสร้างตาราง ที่ไว้ใช้สร้างตารางลงฐานข้อมูลผ่าน Migrate บน Laravel หรือทำการเปลี่ยนแปลงของตารางในฐานข้อมูล ไม่ว่าจะเป็นการเพิ่มตารางใหม่, เพิ่มคอลัมน์ใหม่, แก้ไขชนิดของ Field และอื่นๆ โดยไม่ต้องแก้ไขคำสั่ง SQL โดยตรง
ข้อดีของ Migration คือสามารถทราบและตรวจสอบประวัติการเปลี่ยนแปลงตารางใน เมื่อต้องการยกเลิกการเปลี่ยนแปลงตาราง สามารถใช้คำสั่งย้อนกลับไปใช้ Migration ก่อนหน้านี้ตาม step ที่ต้องการได้
รูปแบบการเขียนคำสั่ง
php artisan migrate: install
เป็นคําสั่งที่ใช้เก็บประวัติข้อมูลชื่อตารางโดยผ่าน migrate ลงในฐานข้อมูล
รูปแบบการเขียนคำสั่ง
php artisan migrate
คำอธิบาย : เป็นคำสั่งที่ใช้ migrate ทุกครั้งหลังจากสร้างไฟล์ หรือแก้ไขตารางในฐานข้อมูล โดยจะมีการตอบ “yes” หรือ “no” เพื่อยืนยันหรือยกเลิกการ migrate
รูปแบบการเขียนคำสั่ง
php artisan migrate –force
คำอธิบาย : เป็นคำสั่งที่ใช้ migrate ทุกครั้งหลังจากสร้างไฟล์ หรือแก้ไขตารางในฐานข้อมูล โดยไม่ต้องมีการยืนยันจากผู้ใช้
ถ้าต้องการสร้างตารางที่เชื่อมโยงกับโมเดลที่กำลังสร้าง สามารถใช้ตัวเลือก –table เพื่อสร้างหรือแก้ไขตารางในฐานข้อมูล
รูปแบบการเขียนคำสั่ง
php artisan make:migration <ชื่อMigration> –table=<ชื่อตาราง>
ตัวอย่างคำสั่ง : php artisan make:migration create_product_table –table=products
คำอธิบาย : สร้างไฟล์ Migration ที่มีชื่อว่า create_product_table พร้อมโค้ดสร้างตารางชื่อ products
จากนั้นบันทึกไฟล์และใช้คำสั่ง php artisan migrate
ผลลัพธ์ : สร้างตารางใหม่ลงในฐานข้อมูลได้สำเร็จ
ตัวอย่างคำสั่ง : php artisan make:migration add_price_to_products –table=products
คำอธิบาย : สร้างไฟล์ Migration เพื่อเพิ่มคอลัมน์ในตาราง products ที่มีอยู่ ในฐานข้อมูล โดยตั้งชื่อ Migration ว่า add_price_to_products
จากนั้นบันทึกไฟล์และใช้คำสั่ง php artisan migrate เพื่ออัปเดตการแก้ไขตาราง products ในฐานข้อมูล
ผลลัพธ์ : เพิ่มคอลัมน์ในตารางลงในฐานข้อมูลได้สำเร็จ
ตรวจสอบฐานข้อมูล พบว่ามีการเพิ่มคอลัมน์ในฐานข้อมูลเรียบร้อย
หากต้องการแก้ไขชนิดคอลัมน์ในตาราง
ตัวอย่างคำสั่ง : php artisan make:migration change_price_type_in_products –table=products
คำอธิบาย : สร้างไฟล์ Migration เพื่อแก้ไขชนิดของ Field เป็นชนิดข้อมูลที่ต้องการ ของตาราง products ที่มีอยู่
ในฐานข้อมูล โดยตั้งชื่อ Migration ว่า change_price_type_in_products
ตัวอย่างเช่น: ให้ price มีจุดทศนิยม โดยสามารถใช้ชนิด float ดังภาพ
จากนั้นทำการบันทึกไฟล์และรัน Migration เพื่ออัปเดตตารางในฐานข้อมูล โดยใช้คำสั่ง php artisan migrate
ผลลัพธ์ : แก้ไขชนิดในตารางลงในฐานข้อมูลได้สำเร็จ
ตรวจสอบฐานข้อมูล พบว่ามีการแก้ไขชนิดคอลัมน์ในฐานข้อมูลเรียบร้อย
หากต้องการเพิ่ม foreign key สามารถทำตามขั้นตอนเช่นเดียวกับข้างบน
หากต้องการยกเลิกการทำงาน migration ก่อนหน้านั้น จะสามารถใช้คำสั่งได้หลายแบบดังนี้
รูปแบบการเขียนคำสั่ง
เป็นคำสั่งที่ใช้ยกเลิกการสร้างตารางเท่านั้น จะไม่มีผลต่อการแก้ไขชื่อคอลัมน์ ยกเลิกเพิ่มคอลัมน์ หรือเปลี่ยนแปลงชนิดคอลัมน์
ผลลัพธ์ : ตารางที่ถูกสร้างใน Migration ล่าสุดจะถูกลบออกจากฐานข้อมูล
ตัวอย่าง : หากมี Migration สองตัวที่สร้างตารางไว้ในฐานข้อมูล
เช่น ตัวแรกสร้างตาราง “products” และตัวที่สองสร้างตาราง “markets”.
เมื่อเราเรียกใช้คำสั่ง rollback จะย้อนกลับไปยัง Migration ล่าสุดที่เคยสร้างไว้
ดังนั้นตาราง “markets” จะถูกลบออกจากฐานข้อมูล ส่วนตาราง ” products” ยังคงอยู่ในฐานข้อมูล
หากต้องการตรวจสอบว่า ได้ลบตารางออกจากฐานข้อมูลแล้วหรือไม่ โดยสามารถใช้คำสั่ง php artisan migrate:rollback อีกครั้ง
จะเห็นว่า ไม่พบข้อมูลการสร้างตาราง markets แสดงว่าตารางนี้ถูกลบออกจากฐานข้อมูลเรียบร้อยแล้ว
หรือต้องการย้อนกลับการ migrate ตามจำนวนขั้นตอน ที่ต้องการลบ แต่ไม่นับไฟล์ Migration ที่เพิ่มคอลัมน์ แก้ไขชนิดคอลัมน์
รูปแบบการเขียนคำสั่ง
php artisan migrate:rollback –step=<จำนวนขั้นตอน>
ตัวอย่างคำสั่ง : php artisan migrate:rollback –step=1
คำอธิบาย : หากมี migrations ทั้งหมดอยู่ 10 step เมื่อใช้คำสั่งนี้ จะทำการย้อนกลับและลบ migration ล่าสุดออกจากฐานข้อมูล
ตัวอย่างคำสั่ง : php artisan migrate:rollback –step=5
คำอธิบาย : หากมี migrations ทั้งหมดอยู่ 10 step เมื่อใช้คำสั่งนี้ จะทำการย้อนกลับและลบ migrations ที่ 6-10 ออกจากฐานข้อมูล โดยเรียงจากล่าสุดไปยังเก่าสุด
รูปแบบการเขียนคำสั่ง
php artisan migrate: reset
เป็นคำสั่งที่ใช้ยกเลิกการสร้างหรือแก้ไขตารางทั้งหมดที่เกี่ยวข้องกับ Migration ทั้งหมดที่เคยทำไว้ ในโปรเจค
ผลลัพธ์ : มีการลบตารางที่สร้างจาก Migration ทั้งหมดออกจากฐานข้อมูล
รูปแบบการเขียนคำสั่ง
php artisan migrate:fresh
เป็นคําสั่งที่ใช้ลบตารางทั้งหมด และสั่ง migrate ใหม่อีกครั้ง
รูปแบบการเขียนคำสั่ง
php artisan migrate: refresh
เป็นคำสั่งย้อนกลับไปยัง migration ที่เคยทำไว้ทั้งหมดก่อนหน้านี้และทำการสร้างหรือแก้ไขตารางใหม่ run migrate ใหม่อีกครั้ง
รูปแบบการเขียนคำสั่ง
php artisan migrate:refresh –path =”database/migrations/<ชื่อไฟล์Migration>”
หากต้องการใช้คำสั่ง php artisan migrate:refresh เฉพาะกับตารางบางตัวเท่านั้น โดยไม่กระทบต่อ Migration อื่น ๆ ในโปรเจค
จะสามารถใช้ –path เพื่อระบุเส้นทางของ Migration ที่ต้องการรีเฟรชได้
ตัวอย่างคำสั่ง :
php artisan migrate:refresh –path=”database/migrations/2023_22_07_170539_create_product_table.php”
หรือหากต้องการเพิ่มคอลัมน์ หรือแก้ไขชนิดคอลัมน์ ในตาราง Product เดิม ในไฟล์ migration เดิม ก็สามารถทำการรีเฟรชเฉพาะ migration ที่ต้องการได้ แต่วิธีดีที่สุดคือทำการสร้าง migration ใหม่ เพื่อเพิ่มคอลัมน์หรือแก้ไขชนิดในตาราง และทำการรีเฟรชเฉพาะ migration ที่ถูกสร้างใหม่ ได้ เพื่อไม่เกิดปัญหา Error ในเมื่อต้องการรัน Migrate กับตารางที่มี Foreign Key ที่เชื่อมโยงกันระหว่างตารางในฐานข้อมูล
ตัวอย่างคำสั่ง :
php artisan migrate:refresh –path=”database/migrations/2023_23_07_035248_change_price_type_in_ products_table.php “
หากยังมี Foreign Key ให้ลบออกจากตารางที่เกี่ยวข้องก่อนที่จะรันคำสั่ง php artisan migrate:refresh ใหม่ได้
โดยทำตามขั้นตอนดังนี้
- สร้างไฟล์ Migration ที่ใช้ในการลบ Foreign Key ออกจากตาราง
ตัวอย่างคำสั่ง : php artisan make:migration drop_foreign_keys
- เปิดไฟล์ Migration ที่คุณสร้างขึ้น (drop_foreign_keys) และเพิ่มคำสั่งภายในเมธอด up() เพื่อลบ Foreign Key ที่ต้องการออกจากตารางที่เกี่ยวข้อง ตัวอย่างเช่น:
รูปแบบการเขียนคำสั่ง:
หรือ อีกวิธีใช้ลบ Foreign Key ของตารางที่เกี่ยวข้อง ในฐานข้อมูลโดยตรง แต่ไม่แนะนำ เนื่องจากจะทำให้ทีมพัฒนา
เกิดความสับสนของโครงสร้างตาราง
ข้อควรระวัง คำสั่งทั้ง Rollback , Reset, Fresh, Refresh จะลบตารางที่มีอยู่ในฐานข้อมูลได้ ดังนั้นควรใช้ในระหว่างการพัฒนาและทดสอบระบบเท่านั้น หากมีข้อมูลสำคัญ ให้ทำการสำรองข้อมูลก่อนเสมอ