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