DataLoaderってなんだ
前職で使っていたgraphQLの謎ライブラリ
取得するデータに関連した情報を取得するときに使う。
普通に取得しようとすると、
取得したstore毎に関連したreviewを探しに行くこととなる。
code:graph
$stores = Store::all(); // 店舗を全件取得する
// 取得した店舗をループで回して一件ずつレビューを出力
foreach($store as $store) {
echo $store->review->storeRate;
}
code:sql
クエリ1 すべての店舗を取得
↓
┌──────────────────────────┐
│ users = SELECT * FROM stores │ ← 1回目のクエリ
└──────────────────────────┘
↓
↓ 各店舗ごとにレビューを取得
↓
┌───────────────────────────────┐
│ reviews = SELECT * FROM reviews WHERE store_id = 1 │ ← 2回目のクエリ
└───────────────────────────────┘
┌───────────────────────────────┐
│ reviews = SELECT * FROM reviews WHERE store_id = 2 │ ← 3回目のクエリ
└───────────────────────────────┘
┌───────────────────────────────┐
│ reviews = SELECT * FROM reviews WHERE store_id = 3 │ ← 4回目のクエリ
└───────────────────────────────┘
・
・
・
┌───────────────────────────────┐
│ reviews = SELECT * FROM reviews WHERE store_id = N │ ← (N+1)回目のクエリ
└───────────────────────────────┘
==> 結果: 合計で 1 + N 回のクエリが発行される
dataLoderを使うと回避できる