iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0
Modern Web

Laravel 30天速成筆記系列 第 9

【Day9】Rollback 與 Migration 安全修改技巧

  • 分享至 

  • xImage
  •  

昨天我們學會了用 Migration 建立與修改資料表,今天要來聊一個很方便,但用錯地方會很危險的指令:rollback


什麼是 Rollback?

在 Laravel 裡,php artisan migrate:rollback 代表「回滾」最近一次的 Migration
它會:

  • 刪掉該 Migration 新增的資料表
  • 撤銷該 Migration 對資料表的修改

這就像你剛裝潢好房子(Migration),rollback 就是「拆掉裝潢並回到之前的狀態」,但家具(資料)也會跟著消失


為什麼 rollback 很危險?

  • 資料會直接消失,而且 rollback 並不會幫你備份資料
  • 正式環境(production) 上跑 rollback,就等於刪掉用戶的真實資料
  • 即使之後再 migrate 回去,表格是空的,資料回不來

什麼時候可以用 rollback?

  1. 本地開發環境
    • 剛寫完 Migration,發現欄位名稱打錯
    • 想快速刪掉表格、重新建立
  2. 測試環境
    • 不在乎資料遺失,只想反覆測試資料表結構
  3. 配合 --step 精準回退
    php artisan migrate:rollback --step=1
    

--step=1 只回滾最近一次的 Migration,比較安全


什麼時候不要用 rollback?

  1. 正式環境
    • 有真實的用戶資料時,rollback 等於刪資料,風險極高!
  2. 多人共用資料庫
    • rollback 可能刪掉別人辛苦輸入的資料,造成衝突~

安全替代方案:用新的 Migration 修改資料表

如果只是要修改欄位(新增、刪除、改名稱),不要 rollback,而是寫一個新的 Migration

範例:

新增 status 欄位到 orders 資料表

php artisan make:migration add_status_to_orders_table --table=orders

打開生成的檔案,修改:

public function up()
{
    Schema::table('orders', function (Blueprint $table) {
        $table->string('status')->default('pending');
    });
}

public function down()
{
    Schema::table('orders', function (Blueprint $table) {
        $table->dropColumn('status');
    });
}

執行:

php artisan migrate

這樣就能安全修改,不會影響其他資料!


小試身手:

Rollback 與安全修改

  1. 建立一張測試資料表

    php artisan make:migration create_test_table
    
  2. migrate 並新增假資料

    php artisan migrate
    
  3. 試著 rollback 看資料會不會消失

    php artisan migrate:rollback
    
  4. 改用安全方式新增欄位

    • 建立新的 migration
    • 修改資料表結構
    • 保留原本資料

小結

  • rollback 適合用在開發或測試環境
  • 正式環境要改資料表,用新的 migration 而不是 rollback!!
  • 永遠記得:rollback 會刪資料,要先想清楚再下指令喔!

上一篇
【Day8】Migration 基礎篇
系列文
Laravel 30天速成筆記9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言