Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Lze použít () použít () použít s knihovnami třetích stran nebo pouze s výmluvnými modely


Lze použít () použít () použít s knihovnami třetích stran nebo pouze s výmluvnými modely


Metoda `Whenloaded ()` v Laravelu je speciálně navržena tak, aby pracovala s vývojovými modelovými vztahy. Podmíněně zahrnuje data vztahů v odpovědích zdrojů API, pouze pokud byl vztah dychtivě naložen na výmluvný model. Tato metoda pomáhá vyhnout se zbytečným dotazům na databázi a udržuje odpovědi API nakláněné pouze zahrnutím souvisejících dat, pokud jsou skutečně načteny.

Použití kontextu `whloaded ()`

- Eloquent modely a vztahy: `Whenloaded ()` Zkontroluje, zda byl načten vztah na modelu výložníku pomocí metod jako `s ()` nebo `load ()`. Pokud je vztah načten, vrátí související data; Jinak nevrátí nic nebo výchozí hodnotu. Toto chování je úzce spojeno s interní metodou Eloquentu „relationloaded ()“, která určuje, zda jsou data vztahu k dispozici v modelové instanci [1] [7] [8].

- Zdroje API: Obvykle se používá uvnitř tříd zdrojů API Laravel API, aby podmíněně zahrnoval související zdroje nebo sbírky na základě toho, zda byly vztahy dychtivě naloženy, zlepšily výkon a vyhýbaly se problému dotazu N+1 [1] [8].

Lze `whloaded ()` použít s knihovnami třetích stran?

- Žádná přímá podpora mimo Eloquent Modely: Protože `Whenloaded ()` se spoléhá na vnitřní stav výmluvného modelu, aby zkontroloval, zda je načten vztah (`relationloaded ()` metoda), je to ze své podstaty navrženo pro výmluvné modely a jejich vztahy. Knihovny třetích stran, které nerozšiřují ani napodobují výmluvné modely a jejich mechanismy načítání vztahů nemohou přímo používat `whloaded ()`.

-Řešení: Pokud knihovna třetích stran vrátí objekty nebo sbírky, které nejsou výložníky, nemůžete použít `, když jsou ()` AS-IS. Podobnou podmíněnou logiku byste museli ručně implementovat nebo zabalit tyto objekty do vlastního zdroje, který napodobuje chování. Alternativně byste mohli ručně zkontrolovat, zda jsou související data přítomna před jejich zahrnutím do odpovědi.

Shrnutí

- `Whentored ()` je vytvořen tak, aby pracoval výhradně s výmluvnými modely a jejich načtenými vztahy.
- Závisí to na stavu načítání interního vztahu Eloquentu, takže jej nelze použít přímo s knihovnami třetích stran, které nepoužívají výmluvné modely.
- Chcete-li podmíněně zahrnout související data ze zdrojů třetích stran, musíte implementovat své vlastní podmíněné kontroly nebo obalů zdrojů.

Díky tomu je `, když je naložen ()` výkonný nástroj pro optimalizaci odpovědí Laravel API, ale je omezen na kontext výmluvného ORM [1] [7] [8].

Citace:
[1] https://henestrosa.dev/blog/how-to-use-whenloaded-in-laravel-api-resources
[2] https://laracasts.com/discuss/channels/laravel/api-resource-using-cont-with-whenloaded
[3] https://laravel.com/docs/12.x/eloquent-resources
[4] https://stackoverflow.com/questions/76828050/how-to-get--single-field-from-a-laravel-Whenloaded-resource
[5] https://www.youtube.com/watch?v=ls7m14ecasu
[6] https://stackoverflow.com/questions/66675594/can-use-use-with-instead-laravel-eloquent
[7] https://laraveldaily.com/post/laravel-api-resources-relations-When-Methods
[8] https://laravel-news.com/whenloaded