Automatické načítání vztahů (Eager Loading) v Laravel 12.8

Laravel 12.8 - Automatické načítání vztahů V systému Laravel se objevila nová funkce, na které se podílela společnost @r9ray která má za cíl zjednodušit vývojářům práci s dychtivý...

Poptat web

09. 04. 2025

Automatické načítání vztahů (Eager Loading) v Laravel 12.8

Laravel 12.8 - Automatické načítání vztahů

V systému Laravel se objevila nová funkce, na které se podílela společnost @r9ray která má za cíl zjednodušit vývojářům práci s dychtivým načítáním vztahů: automatické načítání vztahů. Sloučeno v PR #53655, tato funkce odstraňuje nutnost opakovaného zadávání. load() a with() volání, zejména u rozsáhlých projektů s hluboce vnořenými nebo dynamickými vztahy.

Problém

Ve velkých aplikacích se správa vztahů, které je třeba načíst, stává zdlouhavou:

$projects->load([
'client.owner.details',
'client.customPropertyValues',
'clientContact.customPropertyValues',
'status',
'company.statuses',
'posts.authors.articles.likes',
'related.statuses'
]);

Tento přístup je mnohomluvný, obtížně se udržuje a snadno se může pokazit - zejména pokud se vztahy vyvíjejí v čase nebo jsou používány podmíněně.

Nové řešení: withRelationshipAutoloading()

Elegantnější přístup k obsluze vnořeného dychtivého načítání pomocí příkazu withRelationshipAutoloading() metoda. Při použití na model nebo kolekci automaticky načítá vztahy, kdykoli k nim přistupujete., aniž by bylo nutné výslovně load() or with() telefonáty.

$orders = Order::all()->withRelationshipAutoloading();
 
foreach ($orders as $order) {
echo $order->client->owner->company->name;
}

Když procházíte vztahy, Laravel v tichosti načítá potřebná data na pozadí - není nutné žádné ruční volání.

Podporované vztahy Morph

Polymorfní (morfické) vztahy jsou plně podporovány. Při použití morfů se načítá pouze typ, ke kterému se přistupuje, což udržuje proces efektivní.

Ruční načítání stále funguje

Stále můžete používat load() or with() ručně a Laravel nebude znovu načítat vztahy, které jste již explicitně načetli.

Globální automatické vkládání

Pokud chcete, aby se toto chování týkalo celé aplikace, můžete jej povolit globálně:

Model::automaticallyEagerLoadRelationships();

To šetří čas týmům, které se ve velké míře spoléhají na vnořené nebo dynamické vztahy, snižuje režii a zlepšuje udržovatelnost.

Celé PR najdete zde: laravel/framework#53655

Původní článek publikoval Nabil Hassen.