Eloquent は、Laravel に標準で入っている ORM で、PHP のクラスを通してデータベースを扱いやすくする仕組みです。 テーブルをモデルとして扱い、取得・保存・関連づけを素直に書けるのが特徴です。
まず押さえたいポイント
- Laravel 標準の ORM で、CRUD や関連データの扱いで中心になる
- SQL を書かなくても進められるが、SQL を知らなくてよいわけではない
- 便利さの代償として、発行されるクエリが見えにくくなる
最初に踏むのはほぼ N+1 問題
一覧画面でモデルを回しながら関連データを参照すると、1件ごとに追加のクエリが飛びます。記事20件の一覧でカテゴリ名を表示するだけで、1(一覧)+20(カテゴリ)=21回のクエリになります。100件なら101回です。 対策は関連を先読みする eager load です。
// N+1 になる
$articles = Article::all();
// 2クエリで済む
$articles = Article::with('category')->get();
表示が遅いと感じたら、まずクエリ本数を数えるのが切り分けの第一歩です。件数に比例してクエリが増えているなら N+1 を疑います。
大量データで落ちるパターン
Model::all() は全行をメモリに載せます。数万行のテーブルでこれをやるとメモリ不足で落ちます。一括処理では chunk() や cursor() を使い、必要な列だけ select() で絞ります。
押さえておきたい注意点
create() や update() に外部入力をそのまま渡すと、意図しない列まで書き換えられる恐れがあります(Mass Assignment)。モデル側の $fillable を必ず設計してください。