Maison >développement back-end >tutoriel php >Laravel en charged - Optimisation des performances via le chargement de la relation conditionnelle

Laravel en charged - Optimisation des performances via le chargement de la relation conditionnelle

Robert Michael Kim
Robert Michael Kimoriginal
2025-03-06 02:03:08922parcourir

Laravel whenLoaded - Performance Optimization via Conditional Relationship Loading

Les fonctionnalités de la ressource API de Laravel whenLoaded() peuvent inclure conditionnellement les données associées dans les réponses de l'API, l'optimisation des performances en empêchant les requêtes de base de données inutiles.

Ce qui suit est un exemple de la façon d'utiliser la méthode whenLoaded():

<?php namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class UserResource extends JsonResource
{
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'name' => $this->name,
            'posts' => PostResource::collection($this->whenLoaded('posts'))
        ];
    }
}

Si la relation "Posts" n'est pas chargée, la clé de publications sera supprimée de la réponse, ne laissant que "ID" et "Nom".

Ce qui suit est un exemple de la façon de l'utiliser dans un scénario réel:

<?php namespace App\Http\Controllers;

use App\Models\Article;
use App\Http\Resources\ArticleResource;
use Illuminate\Http\Request;

class ArticleController extends Controller
{
    public function index(Request $request)
    {
        $query = Article::query();

        if ($request->boolean('with_author')) {
            $query->with('author');
        }

        if ($request->boolean('with_comments')) {
            $query->with(['comments' => fn($query) => $query->latest()]);
        }

        return ArticleResource::collection($query->paginate());
    }
}

class ArticleResource extends JsonResource
{
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'title' => $this->title,
            'content' => $this->content,
            'author' => new UserResource($this->whenLoaded('author')),
            'comments' => CommentResource::collection(
                $this->whenLoaded('comments')
            ),
            'latest_comment' => $this->whenLoaded('comments', function() {
                return new CommentResource($this->comments->first());
            })
        ];
    }
}

Cette implémentation démontre un traitement des relations efficace par:

  • Chargement de la relation dynamique en fonction des paramètres de demande
  • conditionnel, y compris
  • Chargement de requête optimisé pour améliorer les performances

L'utilisation whenLoaded() aide à créer des API rationalisées et efficaces qui optimisent les requêtes de base de données en cas de besoin et de maintenir la flexibilité dans la contenu des données pertinentes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn