Visitor - операції над структурами
Додає нові операції над набором об'єктів, не змінюючи їхні класи. Коли операцій більше, ніж типів, і чому новий тип об'єкта - слабке місце патерну.
Почніть вводити, щоб шукати по статтях, вакансіях, компаніях, проєктах, ресурсах, пакетах, подіях і користувачах.
Статті, новини, туторіали та переклади від учасників спільноти
Додає нові операції над набором об'єктів, не змінюючи їхні класи. Коли операцій більше, ніж типів, і чому новий тип об'єкта - слабке місце патерну.
Команда Filament випустила оновлення v4.12.6 та v5.7.6 з вражаючими покращеннями продуктивності: форми рендеряться на 90% швидше, таблиці - на 52% швидше. Також виправлено низку вразливостей безпеки, тому оновлення критично важливе для всіх користувачів.
Спочатку перевіряєте exists(), потім робите дію? Виходить громіздкий if/else.
existsOr() виконає callback, якщо запис не існує.
doesntExistOr() - якщо існує.
Де корисно:
// ПОГАНО
if (!User::where('email', $email)->exists()) {
return response()->json(['error' => 'User not found'], 404);
}
// ДОБРЕ
User::where('email', $email)
->existsOr(function () {
throw new UserNotFoundException('User not found');
});
// Створити, якщо немає
Post::where('slug', $slug)
->existsOr(function () use ($slug) {
Post::create(['slug' => $slug, 'title' => 'Draft']);
});
// Лог при існуванні
Order::where('id', $orderId)
->where('status', 'pending')
->doesntExistOr(function () use ($orderId) {
Log::warning("Non-pending order: {$orderId}");
});
Потрібні різні зв'язки в залежності від контексту?
Використовуйте when() для умовного eager loading.
Типові кейси:
Перевага: одна логіка запиту, різні варіанти відповіді.
// За роллю
$posts = Post::query()
->when(auth()->user()->isAdmin(), function ($query) {
$query->with(['author', 'drafts', 'revisions']);
})
->when(!auth()->user()->isAdmin(), function ($query) {
$query->with('author:id,name');
})
->get();
// За параметрами запиту
$posts = Post::query()
->when(request()->has('include_author'),
fn($q) => $q->with('author')
)
->when(request()->has('include_comments'),
fn($q) => $q->with('comments.user')
)
->get();
Laravel Head - свіжий офіційний пакет від команди Laravel, представлений на Laracon US 2026. Він надає зручний API для управління всіма елементами : заголовками, мета-описами, Open Graph, JSON-LD та ресурсними підказками у Blade, Livewire та Inertia додатках.
Pint 1.30.0 додав форматування Blade-шаблонів. Прапорець --blade вмикає правило Pint/laravel_blade, яке проганяє .blade.php через Prettier і plugin-blade: Blade-синтаксис, атрибути Alpine, wire:-звʼязки, сортування класів Tailwind. Опційно, без ламання наявних конфігів.
Eloquent повертає Collections, а не масиви.
Помилка - одразу викликати toArray() і працювати як з масивом.
Переваги колекцій:
map, filter, groupBy, pluck...)Порада: тримайте дані в Collection якомога довше.
$users = User::all(); // Collection
// ПОГАНО
foreach ($users->toArray() as $user) {
echo $user['name'];
}
// ДОБРЕ
$users->each(function ($user) {
echo $user->name;
});
// Фільтрація й трансформація
$activeAdmins = $users
->where('active', true)
->where('is_admin', true)
->pluck('email');
// Групування
$byRole = $users->groupBy('role');
// Пара "id => name"
$names = $users->pluck('name', 'id');
// Перевірка
$hasAdmin = $users->contains('is_admin', true);
$hasAdult = $users->contains(fn($user) => $user->age > 18);
Задає каркас алгоритму в базовому класі, а змінні кроки делегує нащадкам. Чим відрізняється від Strategy і коли спадкування поступається композиції.
JetBrains випустила PhpStorm 2026.2 з виділеним інструментом для Laravel, що об'єднує команди Artisan, логи помилок та деплоймент у Laravel Cloud. Також додано підтримку PHP 8.5 pipe operator, нові атрибути для роботи з файлами та менеджер навичок для AI-агентів.
Матеріали за темою «Laravel»: усе, що ми писали про це українською. Нижче - суміжні теми, якщо шукаєте ширше.
Зараз опубліковано 150 матеріалів від 3 авторів. Останній матеріал - 12 вересня 2026.