Покращення запитів Laravel за допомогою багаторазових патернів області дії

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 02 серпня, 2025
Ваша розробка в Laravel може стати ще ефективнішою завдяки можливостям фільтрації запитів за допомогою локальних та глобальних скоупів. Досліджуйте, як ця функціональність може спростити вашу роботу з базою даних, зберігаючи при цьому чистоту коду
Функція запитів у Laravel перетворює повторювану логіку запитів до бази даних в елегантні, повторно використовувані компоненти. Ці потужні абстракції дозволяють розробникам інкапсулювати класичні шаблони фільтрації, зберігаючи зрозумілість коду та сприяючи послідовній поведінці запитів у додатках. Локальні області визначають повторно використовувані умови запиту за допомогою спеціально помічених методів у моделях Eloquent: ```php use Illuminate\Database\Eloquent\Attributes\Scope; use Illuminate\Database\Eloquent\Builder; class Order extends Model { #[Scope] protected function completed(Builder $query): void { $query->where('status', 'completed'); } #[Scope] protected function recent(Builder $query): void { $query->where('created_at', '>=', now()->subDays(30)); } } ``` Динамічні параметри областей дозволяють гнучку фільтрацію на основі значень, що визначаються під час виконання: ```php #[Scope] protected function byPriority(Builder $query, string $level): void { $query->where('priority_level', $level); } $urgentOrders = Order::byPriority('urgent')->get(); ``` Створення комплексної системи управління запасами демонструє можливості композиції і ланцюгових запитів у різних операційних контекстах: ```php class Inventory extends Model { #[Scope] protected function available(Builder $query): void { $query->where('quantity', '>', 0) ->where('is_active', true); } #[Scope] protected function lowStock(Builder $query): void { $query->whereColumn('quantity', '<=', 'minimum_threshold'); } #[Scope] protected function inWarehouse(Builder $query, string $location): void { $query->where('warehouse_location', $location); } } $criticalItems = Inventory::available() ->lowStock() ->inWarehouse('main') ->orderBy('quantity', 'asc') ->get(); ``` Глобальні області автоматично застосовують умови до всіх запитів моделі, забезпечуючи послідовність фільтрації даних без ручного втручання. Анонімні глобальні області пропонують зручні модифікації запитів для простих умов фільтрації, зберігаючи чисті визначення моделей. Архітектура областей спрощує побудову складних запитів через методи з ланцюговим викликом, що дозволяє розробникам створювати складні взаємодії з базою даних, використовуючи зрозумілі та документовані шаблони коду, які сприяють підтримуваності та зменшують повторення запитів у додатках.