iT邦幫忙

2024 iThome 鐵人賽

DAY 8
2
Software Development

Laravel 隨筆學習札記系列 第 8

Day8 - 小精靈的書店冒險:一起探索 Laravel Migration 的魔法

  • 分享至 

  • xImage
  •  

哈! 用個小故事來當引言好惹~~😊

從前,有一個小鎮,住著許多熱愛看書小精靈👻。他們每天都忙著搜尋各類書籍,讓小鎮變得更加有文學氣息。但因為書籍實在是太多了,該怎麼管理小精靈們的書籍呢?

1. Migration 是什麼?

某天,精靈們決定建造一間書店,於是開始建立一個管理書籍的系統,以便妥善收藏和查詢每本書📚。他們知道,Migration 能幫助他們輕鬆地新增和修改內容,並確保每位精靈在不同地方都能看到相同的書籍系統。接下來,讓我們一起看看精靈們如何完成建立、修改和刪除書籍系統的資料表。

2. 生成與編寫 Migration

小精靈們首先使用魔法指令 php artisan make:migration 來生成一個新的管理表格,命名為 create_books_table,這樣就能妥善記錄所有書籍資訊,讓書店的運作變得有條不紊。

php artisan make:migration create_books_table

以下是這段管理表格的內容:

  • up() 方法:這裡是精靈們新增書本資料的地方,叫做books
    • 書籍ID
    • 書名(title
    • 作者(author
    • 出版年份(published_year),
    • 記錄每本書的創建時間(timestamps
  • down() 方法:表格需要移除的地方。
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateBooksTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('books', function (Blueprint $table) {
            $table->id(); // 書籍ID
            $table->string('title'); // 書名
            $table->string('author'); // 作者
            $table->integer('published_year'); // 出版年份
            $table->timestamps(); // 時間戳記
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('books'); // 刪除books資料表
    }
}

3. 修改資料表

隨著書籍數量的增長,小精靈們發現需要為每本書增加一個 genre(類別)欄位,這樣他們就能夠更好地分類書籍。於是,他們使用了魔法指令 php artisan make:migration 創建了一個新的 Migration 來修改資料表,表格取名為 add_genre_to_books_table

php artisan make:migration add_genre_to_books_table

AddGenreToBooksTable 檔案中,這段程式碼會在 books資料表中添加一個 genre欄位,並允許其為空值。如果需要回滾變更,可以用 down() 方法刪除這個欄位。

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class AddGenreToBooksTable extends Migration
{
    public function up()
    {
        Schema::table('books', function (Blueprint $table) {
            $table->string('genre')->nullable(); // 新增genre欄位
        });
    }

    public function down()
    {
        Schema::table('books', function (Blueprint $table) {
            $table->dropColumn('genre'); // 刪除genre欄位
        });
    }
}

4. 刪除資料表

可是有一天,精靈們覺得不想再看書了,決定使用 Schema::drop() 方法來刪除整個 books 資料表:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class DropBooksTable extends Migration
{
    public function up()
    {
        Schema::dropIfExists('books'); // 刪除books資料表
    }
    public function down()
    {
	    // 如果需要,這裡可以重新創建資料表
        Schema::create('books', function (Blueprint $table) {
            $table->id(); // 書籍ID
            $table->string('title'); // 書名
            $table->string('author'); // 作者
            $table->integer('published_year'); // 出版年份
            $table->timestamps(); // 時間戳記
        });
    }
}

5. 執行 Migration

當小精靈們完成上述書店表格的設計後,他們需要將這些變更實施。於是,他們使用了以下魔法指令,讓所有變更生效:

php artisan migrate

6. rollback 變更修改

不久後,精靈們在某次修改中發現了一個錯誤,需要將變更回退。這時,他們使用了另一個指令來回滾最近的變更:

php artisan migrate:rollback

這個咒語能夠迅速將最近的一次 Migration 變更撤回,恢復資料庫的狀態。小精靈們學會了這些指令後,對管理書籍資料變得更加輕鬆愉快了。


參考資料

  1. Laravel 11 Create, Run and Rollback Migration
  2. Database: Migrations

踏著身心靈的塔羅腳步,轉向技術與邏輯的工程師之路,就藉由塔羅日抽來紀錄今日的學習與生活吧!

權杖五:在資料庫管理中,版本控制的衝突就像權杖五所代表的混亂,容易讓團隊成員感到困惑。使用 Migrations 可以幫助團隊清楚地定義和共享資料庫架構,這樣不僅減少混亂,還能提升合作效率。

不會飛的豬,就只是平凡的豬。—《紅豬🐽》


上一篇
Day7 - 認識查詢小幫手:Laravel 的 Query Scopes
下一篇
Day9 - Database Index的魔力:讓數據管理更簡單
系列文
Laravel 隨筆學習札記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言