Елегантна обробка результатів запитів за допомогою методу afterQuery у Laravel

0
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 08 квітня, 2025
Вдоскональте свої запити Eloquent за допомогою нового хуку afterQuery() у Laravel, який спрощує маніпуляції з колекціями після отримання даних з бази, роблячи код чистішим і зрозумілішим. Чи готові ви дізнатися, як цей потужний метод може полегшити вашу розробку? Читайте далі!

Покращте обробку запитів Eloquent завдяки новому хуку afterQuery() у Laravel, який пропонує зручний підхід до маніпуляцій із колекціями після отримання даних з бази, зберігаючи ваш код чистим і легким для обслуговування

$query->afterQuery(function ($models) {
    // Внесіть зміни до запитаних моделей ...
});

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

// До
public function scopeWithIsFavoriteOf($query, ?User $user = null) : void
{
    if ($user === null) {
        return $query;
    }
 
    $query->addSelect([
        // 'is_favorite' => деякий запит ...
    ]);
}
 
$products = Product::withIsFavoriteOf(auth()->user())->get();
 
if (auth()->user() === null) {
    $products->each->setAttribute('is_favorite', false);
}

Традиційний підхід вище вимагає перевірки на null у двох різних місцях — спочатку в визначенні скоупу, а потім після виконання запиту. Це створює крихку залежність, де ваш контролер повинен розуміти та реалізовувати додаткову обробку на основі стану аутентифікації

// Після
public function scopeWithIsFavoriteOf($query, ?User $user = null) : void
{
    if ($user === null) {
        $query->afterQuery(fn ($products) => $products->each->setAttribute('is_favorite', false));
 
        return;
    }
 
    $query->addSelect([
        // 'is_favorite' => деякий запит ...
    ]);
}
 
Product::withIsFavoriteOf(auth()->user())->get();

З afterQuery() відповідальність за обробку випадку з null користувачем повністю інкапсульована у скоупі. Ваш контролер просто викликає скоуп, не потребуючи знати або реалізовувати умовну логіку, що призводить до більш стійкої і легкої в обслуговуванні архітектури додатку

Популярні

Logomark Logotype

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

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

Logomark Logotype

Laravel Boost — ваш стартовий набір для програмування з використанням штучного інтелекту

Вперше у світі Laravel з'являється можливість, яка значно спростить ваше повсякденне програмування завдяки новому пакету Laravel Boost. Читайте статтю, щоб дізнатися, як посилена інтеграція штучного інтелекту може підвищити ефективність вашої роботи та оптимізувати створення проектів у Laravel

Logomark Logotype

4 поширені помилки Vite у Laravel

Використання Vite для створення фронтенд-ресурсів у вашому додатку Laravel може бути захоплюючим, але іноді ви можете стикнутися з певними помилками. У цій статті ми розглянемо чотири поширені помилки, з якими ви можете зіткнутися, а також підкажемо способи їх усунення, щоб ви могли знову зосередитися на розробці вашого додатку