O método `when whenloaded ()` em Laravel é projetado especificamente para funcionar com relacionamentos modelo eloquentes. Inclui condicionalmente dados de relacionamento nas respostas dos recursos da API somente se o relacionamento tiver sido carregado no modelo eloquente. Esse método ajuda a evitar consultas de banco de dados desnecessárias e mantém as respostas da API se engula, incluindo apenas dados relacionados quando realmente são carregados.
contexto de uso de `when whenloaded ()`
- Modelos e relacionamentos eloqüentes: `Quando carregado ()` verifica se um relacionamento em um modelo eloqüente foi carregado usando métodos como `com ()` ou `load ()`. Se o relacionamento for carregado, ele retornará os dados relacionados; Caso contrário, ele não retorna nada ou um valor padrão. Esse comportamento é fortemente acoplado ao método interno do eloqüente `RelatioLaaded ()` que determina se os dados de relacionamento estão disponíveis na instância do modelo [1] [7] [8].
- Recursos da API: é comumente usado nas classes de recursos da API do Laravel para incluir condicionalmente recursos ou coleções com base no fato de os relacionamentos estarem carregados, melhorando o desempenho e evitando o problema de consulta N+1 [1] [8].
pode `quando carregado ()` ser usado com bibliotecas de terceiros?
- Nenhum suporte direto fora dos modelos eloquentes: como `quando carregado ()` confia no estado interno do modelo eloqüente para verificar se um relacionamento é carregado (`` relação de relações () `método), é inerentemente projetado para modelos eloqüentes e seus relacionamentos. Bibliotecas de terceiros que não estendem ou imitam modelos eloquentes e seus mecanismos de carregamento de relacionamento não podem usar diretamente `quando carregados ()`.
-Solução alternativa: se uma biblioteca de terceiros retornar objetos ou coleções que não são modelos eloquentes, você não pode usar `quando carregado ()` AS-IS. Você precisaria implementar a lógica condicional semelhante manualmente ou envolver esses objetos em um recurso personalizado que imita o comportamento. Como alternativa, você pode verificar manualmente se os dados relacionados estão presentes antes de incluí -los na resposta.
Resumo
- `Quando carregado ()` é construído para trabalhar exclusivamente com modelos eloquentes e seus relacionamentos carregados.
- Depende do estado de carregamento de relacionamento interno do Eloquent, por isso não pode ser usado diretamente com bibliotecas de terceiros que não usam modelos eloquentes.
- Para incluir dados condicionalmente relacionados de fontes de terceiros, você deve implementar suas próprias verificações condicionais ou invólucros de recursos.
Isso faz com que `quando carregado ()` uma ferramenta poderosa para otimizar as respostas da API do Laravel, mas limitada ao contexto eloquente ORM [1] [7] [8].
Citações:
[1] https://henestrosa.dev/blog/how-to-use-whenloaded-in-laravel-api-resmources
[2] https://laracasts.com/discuss/channels/laravel/api-resource-using-count-with-whenloaded
[3] https://laravel.com/docs/12.x/eloquent-sources
[4] https://stackoverflow.com/questions/76828050/how-to-get-gingle-field-from-a-laravel-whenloaded-resource
[5] https://www.youtube.com/watch?v=LS7M14ecasu
[6] https://stackoverflow.com/questions/66675594/can--i-use-with-insead-load--laravel-eloquent
[7] https://laraveldaily.com/post/laravel-api-resources-relações-when-methods
[8] https://laravel-news.com/whenloaded