Heim > Backend-Entwicklung > PHP-Tutorial > Laravel Wenn geladen - Leistungsoptimierung durch das Laden der bedingten Beziehung

Laravel Wenn geladen - Leistungsoptimierung durch das Laden der bedingten Beziehung

Robert Michael Kim
Freigeben: 2025-03-06 02:03:08
Original
912 Leute haben es durchsucht

Laravel whenLoaded - Performance Optimization via Conditional Relationship Loading

Die API -Ressourcenfunktionen von der API -Ressourcen von Laravel

können bedingt zugehörige Daten in API -Antworten enthalten, wodurch die Leistung optimiert wird, indem unnötige Datenbankabfragen verhindern. whenLoaded()

Folgendes ist ein Beispiel für die Verwendung der

-Methode: 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'))
        ];
    }
}
Nach dem Login kopieren
Wenn die Beziehung "Beiträge" nicht geladen ist, wird die Post -Taste aus der Antwort entfernt, so dass nur "ID" und "Name".

Folgendes ist ein Beispiel dafür, wie man es in einem echten Szenario verwendet:

<?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());
            })
        ];
    }
}
Nach dem Login kopieren
Diese Implementierung zeigt eine effiziente Beziehungsverarbeitung durch:

    Laden von Dynamikbeziehungen basierend auf Anforderungsparametern
  • Bedingung einschließlich
  • optimierte Abfragebelastung für eine verbesserte Leistung
Verwenden von

hilft bei der Erstellung von optimierten und effizienten APIs, die Datenbankabfragen bei Bedarf optimieren und die Flexibilität bei der Einhaltung relevanter Daten aufrechterhalten. whenLoaded()

Das obige ist der detaillierte Inhalt vonLaravel Wenn geladen - Leistungsoptimierung durch das Laden der bedingten Beziehung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage