Eloquent Eager loading

PHP:7.2

Laravel:5.7

Eloquent 中,可以透過 ModelRelationships 取得不同 Table 之間對應的資料。

而取得的方式又細分為兩種:Eager loadingLazy 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
Categories: Laravel