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

更新於 發佈於 閱讀時間約 12 分鐘

在進行 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 資料表。


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

 

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

 

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

留言
avatar-img
留言分享你的想法!
avatar-img
阿棋的沙龍
2會員
34內容數
有軟體開發相關文章。
阿棋的沙龍的其他內容
2025/02/19
在現代的Web應用中,發送即時郵件通知是一項常見的需求。無論是訂單狀態更新、賬單付款通知,還是帳號活動警報,這些通知都能讓用戶即時了解重要信息,並提升使用者體驗。今天,將介紹如何在Laravel中實現一個簡單的郵件通知系統,並演示如何使用通知來通知使用者。
2025/02/19
在現代的Web應用中,發送即時郵件通知是一項常見的需求。無論是訂單狀態更新、賬單付款通知,還是帳號活動警報,這些通知都能讓用戶即時了解重要信息,並提升使用者體驗。今天,將介紹如何在Laravel中實現一個簡單的郵件通知系統,並演示如何使用通知來通知使用者。
2025/02/12
網站的安全性對於保護用戶資料和防止惡意攻擊至關重要。對於許多應用來說,實現Email驗證和兩步驟驗證(2FA)是增強用戶安全的一種有效方式。今天將探索如何在Laravel框架中實現這兩項功能,並結合Google Gmail的應用程式密碼,從而保障你網站的用戶帳號安全。
2025/02/12
網站的安全性對於保護用戶資料和防止惡意攻擊至關重要。對於許多應用來說,實現Email驗證和兩步驟驗證(2FA)是增強用戶安全的一種有效方式。今天將探索如何在Laravel框架中實現這兩項功能,並結合Google Gmail的應用程式密碼,從而保障你網站的用戶帳號安全。
2025/02/05
在現代網絡安全環境中,網站的安全性至關重要。為了確保你的網站免受各種攻擊,進行網站弱點掃描是不可或缺的一步。今天,將介紹一個強大且免費的網站安全掃描工具——OWASP ZAP(Zed Attack Proxy),它不僅功能強大,且易於使用,適合各種用戶,無論你是初學者還是資深的安全專家。
2025/02/05
在現代網絡安全環境中,網站的安全性至關重要。為了確保你的網站免受各種攻擊,進行網站弱點掃描是不可或缺的一步。今天,將介紹一個強大且免費的網站安全掃描工具——OWASP ZAP(Zed Attack Proxy),它不僅功能強大,且易於使用,適合各種用戶,無論你是初學者還是資深的安全專家。
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
在 Laravel 開發 API 時,直接在 Controller 內進行資料加工可能會讓程式碼變得雜亂且難以維護。因此,Laravel 提供 Resource (資源轉換器) 來解決這個問題,讓我們可以統一管理 API 的輸出格式,將模型model或模型集合collection轉換為適合 API
Thumbnail
在 Laravel 開發 API 時,直接在 Controller 內進行資料加工可能會讓程式碼變得雜亂且難以維護。因此,Laravel 提供 Resource (資源轉換器) 來解決這個問題,讓我們可以統一管理 API 的輸出格式,將模型model或模型集合collection轉換為適合 API
Thumbnail
種類 SQL指令分三大部分: 資料定義語言(Data Definition Language,DDL):建立資料表、索引和檢視表等,和定義資料表的欄位。 資料操作語言(Data Manipulation Language,DML):資料表紀錄查詢、插入、刪除和更新指令。 資料控制語言(Dat
Thumbnail
種類 SQL指令分三大部分: 資料定義語言(Data Definition Language,DDL):建立資料表、索引和檢視表等,和定義資料表的欄位。 資料操作語言(Data Manipulation Language,DML):資料表紀錄查詢、插入、刪除和更新指令。 資料控制語言(Dat
Thumbnail
Laravel是一個以MVC(參考:[設計模式]MVC)為架構的PHP Web框架。Laravel支援使用者身份驗證和授權,提供模組化套件系統。Laravel使用Blade模板系統將PHP程式碼與HTML網頁分離。 安裝環境 下載安裝composer https://getcomposer.o
Thumbnail
Laravel是一個以MVC(參考:[設計模式]MVC)為架構的PHP Web框架。Laravel支援使用者身份驗證和授權,提供模組化套件系統。Laravel使用Blade模板系統將PHP程式碼與HTML網頁分離。 安裝環境 下載安裝composer https://getcomposer.o
Thumbnail
在公司專案裡,除了使用Laravel 提供的輔助函數外,我們還可以透過建構屬於自己的Helper function 可以方便地執行諸如處理陣列、文件路徑、字符串和路由等操作,來協助我們更方便處理重複的程式碼。
Thumbnail
在公司專案裡,除了使用Laravel 提供的輔助函數外,我們還可以透過建構屬於自己的Helper function 可以方便地執行諸如處理陣列、文件路徑、字符串和路由等操作,來協助我們更方便處理重複的程式碼。
Thumbnail
在Visual Studio裡有內建的SQL幫助我們存資料,SQL指的是資料庫,那麼我們就用註冊會員這個例子來看一下怎麼使用內建的SQL吧~ 最後面有寫非常基本的SQL相關語法可以做參考 Step 1:建立資料庫
Thumbnail
在Visual Studio裡有內建的SQL幫助我們存資料,SQL指的是資料庫,那麼我們就用註冊會員這個例子來看一下怎麼使用內建的SQL吧~ 最後面有寫非常基本的SQL相關語法可以做參考 Step 1:建立資料庫
Thumbnail
Laravel的Model是資料和邏輯的核心連接,簡化資料庫操作。本指南著重於Model的基本屬性、方法和Eloquent ORM的使用。我們詳細探討了hasMany、hasOne和belongsTo這些關聯,它們基於外鍵確定資料間的關係。透過本文,您將深入了解如何有效地在Laravel中使用Mod
Thumbnail
Laravel的Model是資料和邏輯的核心連接,簡化資料庫操作。本指南著重於Model的基本屬性、方法和Eloquent ORM的使用。我們詳細探討了hasMany、hasOne和belongsTo這些關聯,它們基於外鍵確定資料間的關係。透過本文,您將深入了解如何有效地在Laravel中使用Mod
Thumbnail
最近接獲一個任務,該任務的目標是替一個即將進入正式部署階段的系統,導入一個 database migration tool,以下是此任務整個思考決策的邏輯以及正式進行時技術上比較值得和大家分享的小細節。 系統背景 資料庫的設計方式,目前常見會有兩種方向,code first 以及 database
Thumbnail
最近接獲一個任務,該任務的目標是替一個即將進入正式部署階段的系統,導入一個 database migration tool,以下是此任務整個思考決策的邏輯以及正式進行時技術上比較值得和大家分享的小細節。 系統背景 資料庫的設計方式,目前常見會有兩種方向,code first 以及 database
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News