Визначення спеціалізованого Query Builder у Laravel 12 із використанням PHP-атрибутів

0
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 26 червня, 2025
Випуск Laravel 12.19 представив атрибут UseEloquentBuilder, який дозволяє визначати кастомний будівельник запитів для ваших моделей. З цією новою функціональністю ви зможете спростити свою роботу з моделями та організувати свої запити ефективніше, тож не пропустіть цю можливість

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

До виходу Laravel 12.19, щоб перевизначити запитний будівельник моделі, потрібно було переопределити метод newEloquentBuilder() і повернути екземпляр вашого кастомного запитного будівельника.

public function newEloquentBuilder($query)
{
    return new CustomBuilder($query);
}

Коли ви визначаєте кастомний запитний будівельник, ваш клас Builder повинен реалізовувати контракт Builder. Найпростіший спосіб — наслідувати клас Builder Laravel:

namespace App\Builder;
 
use Illuminate\Database\Eloquent\Builder;
 
class PostBuilder extends Builder
{
    public function wherePublished()
    {
        $this->whereNotNull('published_at');
 
        return $this;
    }
 
    /* ... */
}

Ось як можна налаштувати свій кастомний екземпляр будівельника, використовуючи атрибут UseEloquentBuilder замість переопределення методу newEloquentBuilder() у базовій моделі:

namespace App\Models;
 
use App\Builder\PostBuilder;
use Illuminate\Database\Eloquent\Attributes\UseEloquentBuilder;
use Illuminate\Database\Eloquent\Model;
 
#[UseEloquentBuilder(PostBuilder::class)]
class Post extends Model
{
    /* ... */
}
 
// Використання
Post::query()->wherePublished()->get();

Як і в багатьох інших випадках у Laravel, я рекомендую спершу дотримуватися стандартів (використовувати вбудований запитний будівельник) і переходити до використання специфічного запитного будівельника лише тоді, коли це стане доречним для ваших потреб. Ви самі вирішите, коли варто вводити специфічний запитний будівельник для моделі.

# Дізнайтеся більше

Щоб дізнатися більше про UseEloquentBuilder, ознайомтеся з нотатками про випуск у Laravel 12.19 та Pull Request #56025 для деталей реалізації. Ви також можете дізнатися більше про запитний будівельник бази даних Laravel у документації.

Популярні

Logomark Logotype

Інтеграція Laravel Socialite з бібліотекою Google Client PHP

Ви хочете навчитися, як інтегрувати Google OAuth у вашому проекті Laravel, використовуючи Socialite? Дізнайтеся, як налаштувати доступ до сервісів Google, таких як Календар, у нашій сьогоднішній статті

Logomark Logotype

Як задокументувати кілька API в Laravel за допомогою Scramble

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

Logomark Logotype

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

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