Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Môže byť použitý () s knižnicami tretích strán alebo iba s výrečnými modelmi


Môže byť použitý () s knižnicami tretích strán alebo iba s výrečnými modelmi


Metóda `whenloaded ()` v Laravel je špeciálne navrhnutá tak, aby pracovala s výrečnými vzťahmi modelov. Podmienečne obsahuje údaje o vzťahu v reakciách zdrojov API iba vtedy, ak bol vzťah dychtivý načítaný na výrečný model. Táto metóda pomáha vyhnúť sa zbytočným databázovým dotazom a udržiava reakcie API štíhle sa štíhly iba zahrnutím súvisiacich údajov, keď sa skutočne načítajú.

Použitie kontextu `whenloaded ()`

- Výrečné modely a vzťahy: `whenloaded ()` skontroluje, či bol vzťah na výrečnom modeli načítaný pomocou metód ako `s ()` alebo `load ()`. Ak je vzťah načítaný, vráti súvisiace údaje; V opačnom prípade nevracia nič alebo predvolenú hodnotu. Toto správanie je prísne spojené s Eloquentovou vnútornou metódou „relationloaded ()`, ktorá určuje, či sú údaje vzťahu k dispozícii v inštancii modelu [1] [7] [8].

- Zdroje API: Vo vnútri tried zdrojov Laravel API sa bežne používa, aby podmienečne zahŕňali súvisiace zdroje alebo zbierky na základe toho, či boli vzťahy dychtivé načítané, zlepšovanie výkonu a vyhýbanie sa problému dotazu N+1 [1] [8].

môže `whenloaded ()` používať s knižnicami tretích strán?

- Žiadna priama podpora mimo výrečných modelov: Odkedy `whnoloaded ()` sa spolieha na vnútorný stav výrečného modelu, aby skontroloval, či je vzťah načítaný (`relationloaded ()` metóda), je inherentne navrhnutý pre výrečné modely a ich vzťahy. Knižnice tretích strán, ktoré nerozširujú alebo napodobňujú výrečné modely a ich mechanizmy načítania vzťahov nemôžu priamo používať „pri načítaní ()“.

-Riešenie: Ak knižnica tretej strany vráti objekty alebo zbierky, ktoré nie sú výrečnými modelmi, nemôžete použiť `pri načítaní ()` as-is. Museli by ste implementovať podobnú podmienečnú logiku manuálne alebo zabaliť tieto objekty do vlastného zdroja, ktorý napodobňuje správanie. Prípadne by ste mohli manuálne skontrolovať, či sú prítomné súvisiace údaje prítomné predtým, ako ich zahrnie do odpovede.

Zhrnutie

- `Keď je naložil ()`, je postavený tak, aby fungoval výlučne s výrečnými modelmi a ich načítanými vzťahmi.
- Závisí to od stavu Eloquentovho interného stavu načítania vzťahov, takže ho nemožno použiť priamo s knižnicami tretích strán, ktoré nepoužívajú výrečné modely.
- Ak chcete podmienečne zahrnúť súvisiace údaje zo zdrojov tretích strán, musíte implementovať svoje vlastné podmienečné kontroly alebo obaly zdrojov.

Vďaka tomu je „pri načítaní ()„ výkonným nástrojom na optimalizáciu reakcií Laravel API, ale je obmedzený na výrečný kontext ORM [1] [7] [8].

Citácie:
[1] https://henestrosa.dev/blog/how-to-use-whenoaded-in-laravel-api-resources
[2] https://laracasts.com/discuss/channels/laravel/api-resource-using-count-with-with-whenloaded
[3] https://laravel.com/docs/12.x/eloquent-resources
[4] https://stackoverflow.com/questions/76828050/how-to-get-a-single-field-field-a-laravel-wen-wened-resource
[5] https://www.youtube.com/watch?v=LS7M14ecasu
[6] https://stackoverflow.com/questions/66675594/can-i-usus-with-instead-load-Laravel-eloquent
[7] https://laravaldAily.com/post/laravel-api-si-resources-relations-hen-methods
[8] https://laravel-news.com/whenloaded