在進行 Laravel 開發時,資料庫管理是開發過程中的重要環節,而 Laravel 的遷移(Migrations)提供了一個簡單而強大的方法來創建、修改和管理資料庫結構。本文將引導如何使用 Laravel 的資料庫遷移功能,並透過範例教學,幫助你掌握如何創建資料表、修改欄位、處理資料表關聯等操作喔。
Laravel 的遷移(Migrations)是指在版本控制下管理資料庫結構變更的工具。它可以讓你在不同開發環境間,輕鬆管理資料庫架構的一致性。簡單來說,遷移就像是資料庫的版本控制,讓你的資料庫結構隨著程式的變化而改動。
在 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
的資料表,其中包含了 name
和 color
兩個欄位,並設置了適當的註解來描述它們的作用。
編寫完遷移檔案後,我們需要執行遷移來創建資料表。可以使用以下命令:
php artisan migrate
執行後,Laravel 會自動創建 news_types
資料表,並且會根據你在遷移檔案中定義的欄位來創建相應的資料庫結構。
有時候,我們需要在資料表創建後進行結構修改,比如新增或修改欄位。這時候我們可以使用遷移來達成。
例如,如果我們想修改 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
欄位,並將其設置為具有預設值。
在 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')
)。
php artisan migrate:rollback
php artisan migrate:fresh注意,這會刪除資料庫中的所有資料表,所以在執行之前要確保資料已經備份。
php artisan migrate:refresh
在本文中,我們介紹了如何使用 Laravel 的遷移功能來創建資料表、修改欄位以及設置資料表之間的外鍵關聯。Laravel 提供的資料庫遷移系統不僅能幫助你輕鬆管理資料庫結構,還能保持團隊協作時資料庫的一致性。隨著你的項目成長,掌握 Laravel 的遷移系統將讓你更輕鬆地管理資料庫結構的變化。接下來會介紹如何建立並操作 Model 資料表。
對於這類的撰寫方式習慣嗎?歡迎多多進行良性的知識交流喔!目前是在學習階段,大家有不同看法的話歡迎進行良性的知識交流!
大家可以考慮多多分享文章和考慮訂閱沙龍方案或贊助等喔!不過請注意不要違反著作權等行為。當然決定權都在於您,不會干涉您的任何決定。
提醒,文章僅供正當的知識參考,文章不負任何責任。