Оптимізація продуктивності в Laravel за допомогою умовного завантаження зв'язків через `whenLoaded`

2
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 20 березня, 2026
Використання методу whenLoaded() у Laravel дозволяє умовно активувати дані зв'язків у відповідях API, що оптимізує продуктивність і запобігає зайвим запитам до бази даних. Дізнайтеся, як реалізувати цю функцію та підвищити ефективність ваших API в нашій статті!

Функція API Resources у Laravel whenLoaded() дозволяє умовно включати дані зв'язків у API-відповіді, оптимізуючи продуктивність шляхом запобігання зайвим запитам до бази даних

Ось приклад використання методу 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'))
        ];
    }
}

Якщо зв'язок "posts" не завантажено, ключ "posts" буде видалено з відповіді, залишаючи лише "id" та "name"

Ось приклад того, як це може працювати у реальному сценарії:

<?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());
            })
        ];
    }
}

Ця реалізація демонструє ефективне управління зв'язками завдяки:

Використання whenLoaded() сприяє створенню легких і ефективних API, які оптимізують запити до бази даних, зберігаючи при цьому гнучкість включення супутніх даних за необхідності

Популярні

Logomark Logotype

Claude Agent тепер інтегрований в AI Assistant для PhpStorm

Ви коли-небудь задумувалися, як полегшити свою роботу в Laravel? У нашій статті ми розглядаємо, як інтеграція Claude Code в PhpStorm може підвищити вашу продуктивність, спростивши процес написання коду та навчання нових розробників. Читайте далі, щоб дізнатися більше про переваги та функціональність цього потужного поєднання

Logomark Logotype

Випущено Livewire 3.6

Laravel Livewire випустив нову версію 3.6, яка приносить з собою цікаві HTML-директиви для управління видимістю DOM-елементів і JavaScript-діями. Досліджуйте нові можливості Livewire, що допоможуть вам створити ще більш інтерактивні користувацькі інтерфейси!

Logomark Logotype

Що нового в PHP 8.5

PHP 8.5 обіцяє безліч нових можливостей, таких як оператор Pipe, функції `array_first()` та `array_last()`, а також нове розширення URI. Чи готові ви дізнатися, як ці функції можуть спростити вашу розробку? Читайте далі, щоб дізнатися більше про ці захоплюючі нововведення