ORM
Eloquent
Eloquent Model (
Illuminate\Database\Eloquent\Model
)- 対応するデータベーステーブルへのクエリビルダ
Eloquent結果(=Model の get() 等の結果)として、Collection が返る
- 複数の結果を取得する get() のような Eloquentメソッド は、Illuminate\Database\Eloquent\Collection インスタンスを返す
Collection (
\Illuminate\Support\Collection
)- Eloquent 結果 を操作する多くの便利なクラスを提供
Eloquent Model の find() vs get()
get()
- 複数レコードを取得
- Collection を返す
find()
- 1レコードだけを取得
- Collection の代わりに、Eloquent Model を返す
追記
Eloquent Model
https://dev-dub.hatenablog.com/entry/2020/06/19/155856
get()
など、Illuminate\Database\Eloquent\Model
に定義されているメソッドが呼ばれた場合Collection
を返すCollection
の中身は、Model
のインスタンス
find()
など、Illuminate\Database\Eloquent\Model
に定義されていないメソッドが呼ばれた場合Eloquentビルダー
(\Illuminate\Database\Eloquent\Builder
) のfind()
メソッドを呼び出すModel
を返す
orderBy()
など Eloqunetビルダークラス にも定義されていないメソッドが呼ばれた場合Queryビルダー
(\Illuminate\Database\Query\Builder
) のorderBy()
メソッドを呼び出すCollection
を返すCollection
の中身は連想配列
Eloquentビルダー (\Illuminate\Database\Eloquent\Builder
) の生成方法
- Eloquent Model の
newQuery()
メソッドで生成$UserEloquent->newQuery()
Queryビルダー (
\Illuminate\Database\Query\Builder`) の生成方法
- DBファサードの
table()
メソッドで生成DB::table('users')
Eloquent(ORM) vs Queryビルダー(DB ファサード)
Laravel で DBからデータを取得する方法は 2つある
- Eloquent(ORM) と Queryビルダー(DB ファサード)
Eloquent
- リレーションを使える
- 実際に実行されるクエリがわかりにくい
Query ビルダー
- Eloquent と比べて高速
- 実際に実行されるクエリがわかりわすい
- JOIN 出来る (複雑なクエリが書ける)