Eloquent ORMとは
LaravelにはEloquentというオブジェクトリレーショナルマッパー(ORM)が含まれています。 Eloquentはデータベースとの対話を簡単にするためのもので、ActiveRecordパターンを実装しています。 Eloquentを使うと、データベースの各テーブルに対応する「モデル」クラスを用意します。 モデルを通じてレコードの取得・挿入・更新・削除が行えます。Eloquentを使う前に、
config/database.php でデータベース接続を設定してください。
デフォルトでは .env ファイルの DB_* 設定が使われます。モデルの作成
make:model Artisanコマンドで新しいモデルを生成します。
-m オプションを使います。
app/Models ディレクトリに作成されます。
モデルとテーブルの対応関係
Eloquentはクラス名からテーブル名を自動的に推測します。 クラス名をスネークケースの複数形に変換したものがテーブル名になります。
テーブル名が命名規則に沿わない場合は、モデルに
$table プロパティを定義して明示的に指定できます。
タイムスタンプ
Eloquentはデフォルトでcreated_at と updated_at カラムを自動管理します。
マイグレーションで $table->timestamps() を追加しておくと、モデルの保存・更新時に自動的に値がセットされます。
タイムスタンプの自動管理を無効にするには $timestamps を false に設定します。
マスアサインメント保護
Eloquentでまとめてデータを保存する際は、マスアサインメント保護の設定が必要です。fillable
代入を許可するカラムを$fillable プロパティで指定します。
guarded
逆に代入を禁止するカラムを指定するには$guarded を使います。
Eloquentクエリ実行フロー
User::where()->get() のようなクエリがどのように実行されるか、内部の流れを示します。
基本的なCRUD操作
レコードの取得(Read)
すべてのレコードを取得します。レコードの作成(Create)
create メソッドでレコードを1つ挿入します($fillable の設定が必要です)。
レコードの更新(Update)
モデルを取得して値を変更し、save を呼ぶと更新されます。
update メソッドを使うと、まとめて複数のカラムを更新できます。
レコードの削除(Delete)
delete メソッドでレコードを削除します。
基本的なクエリメソッド
実践例:Postモデルを使ったデータ操作
マイグレーションで作成したposts テーブルを操作するコントローラーの例です。
モデルイベントのライフサイクル
save() を呼び出したときに発火するイベントの流れを示します。新規作成か更新かで異なるイベントが発火しますが、saving・saved は両方の場合に共通して発火します。
次のステップ
マイグレーション
Eloquentが利用するテーブルをマイグレーションで作成する方法を振り返ります。