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