Maison >développement back-end >tutoriel php >Laravel en charged - Optimisation des performances via le chargement de la relation conditionnelle
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:
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!