Динамічна завантаження відносин у Laravel

0
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 27 лютого, 2025
Метод loadMissing у Laravel відкриває нові можливості для ефективного завантаження зв’язків моделей, запобігаючи проблемам з N+1 запитами. Чи готові ви дізнатися, як оптимізувати свої API та інформаційні панелі за допомогою цієї гнучкої функції? Читайте далі

Метод loadMissing у Laravel забезпечує гнучке завантаження відносин для існуючих моделей або колекцій. Цей підхід дозволяє уникнути проблеми з N+1 запитами та завантажувати відносини лише за необхідності.

Ця функція особливо корисна при створенні API з опціональними включеннями або інформаційних панелей, де різні секції потребують різних даних про відносини.

$post->loadMissing(['comments', 'author']);
// З обмеженнями
$post->loadMissing(['comments' => function($query) {
    $query->latest()->take(5);
}]);

Ось приклад завантажувача даних для інформаційної панелі:

<?php
 
namespace App\Http\Controllers;
 
use App\Models\Dashboard;
use Illuminate\Http\Request;
 
class DashboardController extends Controller
{
    public function show(Request $request, Dashboard $dashboard)
    {
        // Завантаження основних відносин
        $dashboard->loadMissing([
            'widgets',
            'owner',
        ]);
 
        // Умовне завантаження додаткових даних
        if ($request->section === 'analytics') {
            $dashboard->loadMissing([
                'widgets.viewHistory' => function($query) {
                    $query->whereBetween('viewed_at', [
                        now()->subDays(30),
                        now()
                    ]);
                },
                'widgets.interactions'
            ]);
        }
 
        if ($request->section === 'sharing') {
            $dashboard->loadMissing([
                'sharedUsers',
                'shareLinks' => function($query) {
                    $query->where('expires_at', '>', now());
                }
            ]);
        }
        return $dashboard;
    }
}

Метод loadMissing розумно завантажує лише необхідні відносини:

// GET /dashboard/1?section=analytics
{
    "id": 1,
    "name": "Огляд продажів",
    "widgets": [
        {
            "id": 1,
            "type": "графік",
            "viewHistory": [
                {
                    "viewed_at": "2024-02-01T10:30:00Z",
                    "views": 150
                }
            ],
            "interactions": [
                {
                    "type": "зміна_фільтра",
                    "timestamp": "2024-02-01T11:20:00Z"
                }
            ]
        }
    ]
}

loadMissing забезпечує ефективний спосіб управління завантаженням відносин, оптимізуючи запити до бази даних і зберігаючи гнучкість коду

Популярні

Logomark Logotype

Створення CLI-додатка за допомогою Laravel та Docker

Зазирніть у світ Laravel, де потужний CLI-фреймворк відкриває нові можливості для розробки командного інтерфейсу. Дізнайтеся, як створити просту утиліту для перевірки акцій, яка працює з Docker, та які переваги це може принести у вашому проєкті!

Logomark Logotype

"SQLSTATE[HY000] [2002] Connection refused" у Laravel в GitHub Actions

Чи стикалися ви з помилкою «SQLSTATE[HY000] [2002] Connection refused» під час налаштування GitHub Actions для вашого додатку на Laravel? У нашій статті ми розглянемо три поширені причини цієї помилки та надамо рішення для їх усунення. Читайте далі, щоб дізнатися, як ваш CI/CD потік може працювати бездоганно!

Logomark Logotype

Використання повнотекстового пошуку в Laravel

Laravel пропонує потужні можливості повнотекстового пошуку за допомогою методів whereFullText та orWhereFullText, що дозволяють здійснювати складні запити до бази даних. Дізнайтеся, як реалізувати ефективний пошук для вашого блогу чи системи управління контентом