Migrate “fresh” กับ “refresh” ใน laravel ต่างกันยังไง

ในการ Develop Laravel นั้นการใช้ Migration ก็สำคัญมากๆ เพราะไม่ว่าจะตอนพัฒนาเว็บอยู่ หรือ ตอนนำขึ้น Production แล้วก็ต้องใช้ migration ด้วยกันทั้งสิ้น แต่เนื่องจาก migration ใน Laravel นั้นมีหลายคำสั่งผมเชื่อว่าหลายๆคนคงเลือกใช้งานผิดกันอยู่บ้างวันนี้เลยจะมาขยายความคำสั่ง fresh และ refresh ใน Laravel กัน

เมื่อเราพิมพ์คำสั่ง fresh ใน migrate ดังนี้

php artisan migrate:fresh

มันคือการสั่งให้ลบ Table ทั้งหมดในฐานข้อมูลเราทิ้งแล้วอ่านไฟล์ migration เพื่อสร้างใหม่ นั้นหมายความว่าข้อมูลในฐานข้อมูลทั้งหมดจะหายไป

แต่ถ้าเรารัน refresh ใน migrate ดังนี้

php artisan migrate:refresh

มันคือการสั่งให้ลบ Table ทั้งหมดทิ้งแล้วอ่านไฟล์ migration เพื่อสร้างใหม่ เช่นเดียวกับคำสั่ง fresh แต่สิ่งที่แตกต่างคือ ระบบจะใช้การ rollback คือลบทีละตารางโดยเริ่มจาก migration ล่าสุดก่อน ยกตัวอย่างเช่นเรามีการสร้างไฟล์ migration ดังนี้

  • 2014_10_12_000000_create_users_table.php
  • 2014_10_12_100000_create_password_resets_table.php
  • 2019_08_19_000000_create_failed_jobs_table.php
  • 2020_01_29_221303_create_customers_table.php
  • 2020_01_29_222143_create_services_table.php

ระบบจะทำการลบ table ดังนี้โดยเริ่มจาก services -> customers -> failed_jobs -> password_resets -> users เพราะแบบนี้มันจึงมีคำสั่งพิเศษอีกตัวขึ้นมาคือ –step=จำนวนที่ต้องการ rollback เช่น

php artisan migrate:refresh --step=1

จากตัวอย่าง migration ด้านบน ระบบจะทำการลบแค่ Table services เท่านั้นซึ่งก็คือไฟล์นี้

  • 2020_01_29_222143_create_services_table.php

หลังจากนั้นก็อ่านไฟล์แล้วสร้างฐานข้อมูลให้เราใหม่ เป็นอันจบเรียบร้อย

สรุป

  • คำสั่ง fresh ใช้สำหรับกรณีที่ต้องการลบข้อมูลทั้งหมดและสร้างตารางใหม่
  • คำสั่ง refresh ใช้สำหรับกรณีที่ต้องการลบข้อมูลบางตารางแล้วสร้างใหม่

บทความที่เกี่ยวข้อง

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

ITTHIPAT

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

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

Scroll to Top