更新於 2024/12/12閱讀時間約 12 分鐘

Laravel 資料庫遷移與管理(完整指南)

在進行 Laravel 開發時,資料庫管理是開發過程中的重要環節,而 Laravel 的遷移(Migrations)提供了一個簡單而強大的方法來創建、修改和管理資料庫結構。本文將引導如何使用 Laravel 的資料庫遷移功能,並透過範例教學,幫助你掌握如何創建資料表、修改欄位、處理資料表關聯等操作喔。

什麼是 Laravel 資料庫遷移?

Laravel 的遷移(Migrations)是指在版本控制下管理資料庫結構變更的工具。它可以讓你在不同開發環境間,輕鬆管理資料庫架構的一致性。簡單來說,遷移就像是資料庫的版本控制,讓你的資料庫結構隨著程式的變化而改動。

步驟 1: 創建資料表

在 Laravel 中創建資料表,我們需要使用 artisan 命令行工具,這個工具幫助我們生成遷移檔案,進行資料表的創建與修改。

創建一個遷移檔案

首先,我們要創建一個新的資料表,例如創建 news_types 資料表。可以使用以下命令:

php artisan make:migration create_news_types_table

這會在 database/migrations 目錄中生成一個新的遷移檔案。這個檔案中會包含資料表的結構和欄位定義。

編寫遷移檔案

打開生成的遷移檔案,編輯 up() 方法來定義資料表的欄位。以下是創建 news_types 資料表的範例:

<?php

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

return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('news_types', function (Blueprint $table) {
$table->id(); // 自動遞增的 ID 欄位
$table->string('name', 50)->comment('分類名稱'); // 資料名稱欄位
$table->string('color')->comment('分類顏色'); // 顏色欄位
$table->timestamps(); // 自動生成 created_at 和 updated_at 欄位
});
}

/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('news_types'); // 如果需要回滾遷移,刪除資料表
}
};

在這段程式碼中,我們創建了一個名為 news_types 的資料表,其中包含了 namecolor 兩個欄位,並設置了適當的註解來描述它們的作用。

執行遷移

編寫完遷移檔案後,我們需要執行遷移來創建資料表。可以使用以下命令:

php artisan migrate

執行後,Laravel 會自動創建 news_types 資料表,並且會根據你在遷移檔案中定義的欄位來創建相應的資料庫結構。

步驟 2: 修改資料表結構

有時候,我們需要在資料表創建後進行結構修改,比如新增或修改欄位。這時候我們可以使用遷移來達成。

修改欄位

例如,如果我們想修改 news_types 資料表中的 color 欄位,將其設為具有預設值,可以創建一個新的遷移來處理這個修改。

php artisan make:migration change_color_from_news_types_table

接下來,在新生成的遷移檔案中,修改 color 欄位:

<?php

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

return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('news_types', function (Blueprint $table) {
// 修改 color 欄位,設定預設值
$table->string('color', 50)->default('')->comment('分類顏色')->change();
});
}

/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('news_types', function (Blueprint $table) {
// 回滾時移除預設值
$table->string('color', 50)->comment('分類顏色')->change();
});
}
};

執行修改遷移

同樣,執行以下命令來應用這個修改:

php artisan migrate

這樣就可以成功修改 news_types 資料表中的 color 欄位,並將其設置為具有預設值。

步驟 3: 資料表關聯與外鍵

在 Laravel 中,我們可以使用外鍵來設置資料表之間的關聯。下面是如何創建 news 資料表,並與 news_types 資料表建立外鍵關聯的範例。

<?php

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

return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('news', function (Blueprint $table) {
$table->id(); // 自動遞增的 ID 欄位
$table->foreignId('news_type_id')->constrained()->onDelete('cascade')->comment('分類id'); // 外鍵關聯到 news_types 資料表
$table->string('title', 50)->comment('標題');
$table->mediumText('content')->default('')->comment('內文');
$table->date('date')->comment('發布時間');
$table->string('cover_path')->default('')->comment('封面照片路徑');
$table->string('cover_alt')->default('')->comment('封面照片說明');
$table->boolean('show')->default(1)->comment('是否上架(0:下架、1:上架)');
$table->timestamps();
});
}

/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('news');
}
};

在這段程式碼中,news_type_id 是一個外鍵,它關聯到 news_types 資料表的 id 欄位。當 news_types 資料表的某一條記錄被刪除時,news 資料表中的對應資料也會自動被刪除(onDelete('cascade'))。

步驟 4: 常用的遷移命令

  1. 回滾遷移:
    如果你想回滾(rollback)最新的遷移,可以使用:
    php artisan migrate:rollback

  2. 重設資料庫:
    如果你想重新運行所有的遷移(例如在開發過程中需要重設資料庫結構),可以使用:
    php artisan migrate:fresh

    注意,這會刪除資料庫中的所有資料表,所以在執行之前要確保資料已經備份。
  3. 重新執行所有遷移:
    如果想清除並重新執行所有遷移,可以使用:
    php artisan migrate:refresh

結論

在本文中,我們介紹了如何使用 Laravel 的遷移功能來創建資料表、修改欄位以及設置資料表之間的外鍵關聯。Laravel 提供的資料庫遷移系統不僅能幫助你輕鬆管理資料庫結構,還能保持團隊協作時資料庫的一致性。隨著你的項目成長,掌握 Laravel 的遷移系統將讓你更輕鬆地管理資料庫結構的變化。接下來會介紹如何建立並操作 Model 資料表。


對於這類的撰寫方式習慣嗎?歡迎多多進行良性的知識交流喔!目前是在學習階段,大家有不同看法的話歡迎進行良性的知識交流!

 

大家可以考慮多多分享文章和考慮訂閱沙龍方案或贊助等喔!不過請注意不要違反著作權等行為。當然決定權都在於您,不會干涉您的任何決定。

 

提醒,文章僅供正當的知識參考,文章不負任何責任。

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.