Eloquent Eager loading
PHP:7.2
Laravel:5.7
在 Eloquent
中,可以透過 Model
的 Relationships
取得不同 Table 之間對應的資料。
而取得的方式又細分為兩種:Eager loading
、Lazy Eager loading
模式。
Eager loading - with()
這是最廣泛使用的方法,就是在拿資料時,透過 with()
,一次把關聯的資料全部拉出來。
範例
$albums = Album::with(['songs'])->limit(10)->get();
使用 with
會執行以下 SQL query:
select * from album
where album
.deleted_at
is null
select * from song
where song
.album_id
in (1, 2, 3, 4, 5) and song
.deleted_at
is null
Lazy Eager loading - load()
當不是所有資料都需要把關聯資料取出來時,考量到不必要的效能花費,可以使用 load()
方法,真正需要時才去 DB 拿關聯資料。
範例
$albums = Album::all();
if ($someCondition) {
$albums->load('song');
}
如果沒有進入條件判斷式,只會執行以下 SQL query:
select * from album
where album
.deleted_at
is null