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

更新於 2024/12/12閱讀時間約 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
0會員
18內容數
有軟體開發相關文章。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
阿棋的沙龍 的其他內容
今天,我們將簡單介紹 Git 和 GitHub,並深入了解如何使用 Git 解決衝突。此外,還會介紹常見的 API 方法 和 Laravel 中的類語法,讓你更好地理解程式碼的運作方式。
在這篇文章中,來學習如何安裝 XAMPP、Composer 和 Laravel,並深入探討如何在 Laravel 專案中使用 PHP 進行開發。這篇將會包括一些基本的 PHP 語法、常見的操作(如迴圈、條件式、陣列處理等)以及如何在 Laravel 中進行一些常見的任務。
今天,我們將簡單介紹 Git 和 GitHub,並深入了解如何使用 Git 解決衝突。此外,還會介紹常見的 API 方法 和 Laravel 中的類語法,讓你更好地理解程式碼的運作方式。
在這篇文章中,來學習如何安裝 XAMPP、Composer 和 Laravel,並深入探討如何在 Laravel 專案中使用 PHP 進行開發。這篇將會包括一些基本的 PHP 語法、常見的操作(如迴圈、條件式、陣列處理等)以及如何在 Laravel 中進行一些常見的任務。
你可能也想看
Google News 追蹤
Thumbnail
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
Thumbnail
CodeIgniter 3 和 Laravel 是兩種不同的 PHP 框架,各有其特點和適用場景。CodeIgniter 3 是一個輕量級框架,Laravel 是一個功能強大的現代 PHP 框架,同樣都有Models的它們有什麼樣的差別呢?
Thumbnail
介紹工作後幾個常見的小問題,包括寫 Log 的好習慣、本地印出錯誤或過程、PHPCS 工具、變數儲存於設定檔、避免魔術數字、程式碼靜態分析與動態分析。
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
今天學習Git 的第一步: 取得與建立項目 Getting and Creating Projects [1]。 之前提到「儲存庫 Repository」就是儲存所有「檔案 File」的地方。 在Git 的邏輯裡,儲存庫是要儲存所有的「快照 Snapshots」。 什麼是快照
儲存庫 (Repository) 是檔案(File)的儲存區域。 在版本控制中,儲存庫是包含所有檔案的資料夾[1]。 每次改動檔案,你都可以選擇要不要儲存。 而那些有被處存的改動,就被稱為「提交 Commit」[2]。 而當一個儲存庫有多個開發者(Developer)在貢獻,
Thumbnail
工具功能 (1) 彈性任意查詢檔案,如對來源目錄設定,檔案修改日期 設定,檔名特定字串或副檔名設定後,自動查出明細,並可展開至各階子目錄處理     (2) 依查詢後結果,可產出 LIST ,提供查詢結果之確認,再依此對檔案作複 (3) 可對檔案作移動,複製至別處,刪除處理,使電腦可騰出硬碟空間
Thumbnail
第一份正職工作 在iot公司擔任後端工程師,一上工就使用先前沒用過的php/laravel,也馬上負責公司產品的架構規劃,先前資料庫只有簡單記載使用者跟使用者的一些設定,很多地方有資料不一致的問題,產品內容還有很多實體的關係沒有被定義進資料庫都是這次改版我要做的事情。 改版納入公司、機器
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
Migration在 Laravel 中是一種用來管理資料庫結構變更的機制。它的主要目的是使開發者能夠在應用程序的不同環境中保持資料庫結構的一致性,並輕鬆地進行結構變更
Thumbnail
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
Thumbnail
CodeIgniter 3 和 Laravel 是兩種不同的 PHP 框架,各有其特點和適用場景。CodeIgniter 3 是一個輕量級框架,Laravel 是一個功能強大的現代 PHP 框架,同樣都有Models的它們有什麼樣的差別呢?
Thumbnail
介紹工作後幾個常見的小問題,包括寫 Log 的好習慣、本地印出錯誤或過程、PHPCS 工具、變數儲存於設定檔、避免魔術數字、程式碼靜態分析與動態分析。
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
今天學習Git 的第一步: 取得與建立項目 Getting and Creating Projects [1]。 之前提到「儲存庫 Repository」就是儲存所有「檔案 File」的地方。 在Git 的邏輯裡,儲存庫是要儲存所有的「快照 Snapshots」。 什麼是快照
儲存庫 (Repository) 是檔案(File)的儲存區域。 在版本控制中,儲存庫是包含所有檔案的資料夾[1]。 每次改動檔案,你都可以選擇要不要儲存。 而那些有被處存的改動,就被稱為「提交 Commit」[2]。 而當一個儲存庫有多個開發者(Developer)在貢獻,
Thumbnail
工具功能 (1) 彈性任意查詢檔案,如對來源目錄設定,檔案修改日期 設定,檔名特定字串或副檔名設定後,自動查出明細,並可展開至各階子目錄處理     (2) 依查詢後結果,可產出 LIST ,提供查詢結果之確認,再依此對檔案作複 (3) 可對檔案作移動,複製至別處,刪除處理,使電腦可騰出硬碟空間
Thumbnail
第一份正職工作 在iot公司擔任後端工程師,一上工就使用先前沒用過的php/laravel,也馬上負責公司產品的架構規劃,先前資料庫只有簡單記載使用者跟使用者的一些設定,很多地方有資料不一致的問題,產品內容還有很多實體的關係沒有被定義進資料庫都是這次改版我要做的事情。 改版納入公司、機器
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
Migration在 Laravel 中是一種用來管理資料庫結構變更的機制。它的主要目的是使開發者能夠在應用程序的不同環境中保持資料庫結構的一致性,並輕鬆地進行結構變更