Skip to main content

Eloquent ORM 是什麼

Laravel 內建了名為 Eloquent 的物件關聯映射器(ORM)。 Eloquent 讓與資料庫的互動變得簡單,並實作了 ActiveRecord 模式 使用 Eloquent 時,你會為每個資料表建立對應的「模型」類別。 透過模型即可完成資料的取得、新增、更新與刪除。
使用 Eloquent 前,請先在 config/database.php 設定資料庫連線。 預設會採用 .env 檔案中的 DB_* 設定。

建立模型

make:model Artisan 指令建立新模型。
若想同時建立 migration,可加 -m 選項。
模型會建立在 app/Models 目錄下。

模型與資料表的對應

Eloquent 會自動由類別名稱推測資料表名稱: 將類別名轉為 snake_case 且複數形式即為資料表名稱。 若資料表名稱不符命名慣例,可在模型中定義 $table 屬性明確指定。

時間戳記

Eloquent 預設會自動管理 created_atupdated_at 欄位。 在 migration 中加入 $table->timestamps(),模型儲存 / 更新時就會自動設定值。 若要關閉自動時間戳記,可將 $timestamps 設為 false

Mass Assignment 保護

以 Eloquent 一次匯入資料時,需要進行 mass assignment 保護設定。

fillable

$fillable 屬性指定允許批次指派的欄位。

guarded

反之,若要指定「不允許」批次指派的欄位,使用 $guarded
$guarded 設為空陣列會允許所有欄位被批次指派。 當直接使用使用者輸入時,可能會導致意外的欄位被覆寫;建議使用 $fillable 明確列出允許的欄位。

Eloquent 查詢執行流程

以下示意 User::where()->get() 這類查詢的內部執行流程。

基本 CRUD 操作

讀取(Read)

取得所有紀錄:
依條件取得:

建立(Create)

create 方法建立一筆紀錄(需先設定 $fillable)。
也可以建立實例後個別設值。

更新(Update)

取得模型,修改值後呼叫 save 即可更新。
使用 update 方法可一次更新多個欄位。
也可以一次更新符合條件的多筆紀錄。

刪除(Delete)

使用 delete 方法刪除紀錄。
也可以指定 ID 直接刪除。

基本查詢方法

實戰範例:以 Post 模型進行資料操作

以下是操作透過 migration 建立的 posts 資料表的控制器範例:
在控制器方法的參數上寫 Post $post,Laravel 會自動由路由參數取得模型(路由模型繫結)。 你就不必自己呼叫 Post::findOrFail($id)

模型事件的生命週期

呼叫 save() 時會觸發的事件流程如下。新建立或更新會觸發不同事件,但 savingsaved 兩者皆會觸發。

下一步

Migrations

複習如何用 migration 建立 Eloquent 所使用的資料表。
最後修改於 2026年8月2日