Skip to main content

Eloquent ORMとは

LaravelにはEloquentというオブジェクトリレーショナルマッパー(ORM)が含まれています。 Eloquentはデータベースとの対話を簡単にするためのもので、ActiveRecordパターンを実装しています。 Eloquentを使うと、データベースの各テーブルに対応する「モデル」クラスを用意します。 モデルを通じてレコードの取得・挿入・更新・削除が行えます。
Eloquentを使う前に、config/database.php でデータベース接続を設定してください。 デフォルトでは .env ファイルの DB_* 設定が使われます。

モデルの作成

make:model Artisanコマンドで新しいモデルを生成します。
マイグレーションと同時に作成する場合は -m オプションを使います。
モデルは app/Models ディレクトリに作成されます。

モデルとテーブルの対応関係

Eloquentはクラス名からテーブル名を自動的に推測します。 クラス名をスネークケースの複数形に変換したものがテーブル名になります。 テーブル名が命名規則に沿わない場合は、モデルに $table プロパティを定義して明示的に指定できます。

タイムスタンプ

Eloquentはデフォルトで created_atupdated_at カラムを自動管理します。 マイグレーションで $table->timestamps() を追加しておくと、モデルの保存・更新時に自動的に値がセットされます。 タイムスタンプの自動管理を無効にするには $timestampsfalse に設定します。

マスアサインメント保護

Eloquentでまとめてデータを保存する際は、マスアサインメント保護の設定が必要です。

fillable

代入を許可するカラムを $fillable プロパティで指定します。

guarded

逆に代入を禁止するカラムを指定するには $guarded を使います。
$guarded を空配列にするとすべてのカラムへの代入を許可します。 ユーザー入力をそのまま渡す場合は意図しないカラムが書き換えられる危険があるため、$fillable で許可するカラムを明示的に指定することを推奨します。

Eloquentクエリ実行フロー

User::where()->get() のようなクエリがどのように実行されるか、内部の流れを示します。

基本的なCRUD操作

レコードの取得(Read)

すべてのレコードを取得します。
条件を指定して取得します。

レコードの作成(Create)

create メソッドでレコードを1つ挿入します($fillable の設定が必要です)。
インスタンスを作成して個別に代入することもできます。

レコードの更新(Update)

モデルを取得して値を変更し、save を呼ぶと更新されます。
update メソッドを使うと、まとめて複数のカラムを更新できます。
条件に一致する複数のレコードをまとめて更新することもできます。

レコードの削除(Delete)

delete メソッドでレコードを削除します。
IDを指定して直接削除することもできます。

基本的なクエリメソッド

実践例:Postモデルを使ったデータ操作

マイグレーションで作成した posts テーブルを操作するコントローラーの例です。
コントローラーのメソッド引数に Post $post と書くと、Laravelがルートパラメーターからモデルを自動的に取得してくれます(ルートモデルバインディング)。 Post::findOrFail($id) を自分で書く必要がなくなります。

モデルイベントのライフサイクル

save() を呼び出したときに発火するイベントの流れを示します。新規作成か更新かで異なるイベントが発火しますが、savingsaved は両方の場合に共通して発火します。

次のステップ

マイグレーション

Eloquentが利用するテーブルをマイグレーションで作成する方法を振り返ります。
最終更新日 2026年4月8日