Pipeline - послідовна обробка
Пропускає дані через серію кроків, де кожен трансформує вхід і передає далі. Готовий Illuminate\Pipeline\Pipeline та його зв'язок із middleware.
Почніть вводити, щоб шукати по статтях, вакансіях, компаніях, проєктах, ресурсах, пакетах, подіях і користувачах.
Статті, новини, туторіали та переклади від учасників спільноти
Пропускає дані через серію кроків, де кожен трансформує вхід і передає далі. Готовий Illuminate\Pipeline\Pipeline та його зв'язок із middleware.
Laravel Rulebook - новий пакет для керування бізнес-правилами, які змінюються з часом. Він дозволяє зберігати історію політик у коді, точно визначати, яке правило діяло на конкретну дату, та пояснювати рішення, прийняті місяці тому.
Потрібно знайти перший елемент, що відповідає умові?
firstWhere() виглядає чистіше, ніж filter()->first().
Переваги:
Оператори:
Такі ж, як у where(): =, !=, >, <, >=, <=
Порада: використовуйте другий параметр для значення за замовчуванням, якщо елемент не знайдено.
$users = collect([
['id' => 1, 'name' => 'John', 'age' => 25],
['id' => 2, 'name' => 'Jane', 'age' => 30],
['id' => 3, 'name' => 'Bob', 'age' => 35],
]);
// ПОГАНО: два методи
$user = $users->filter(fn($u) => $u['age'] > 30)->first();
// ДОБРЕ: один метод
$user = $users->firstWhere('age', '>', 30);
// ['id' => 3, 'name' => 'Bob', 'age' => 35]
// Точна відповідність (оператор за замовчуванням - =)
$user = $users->firstWhere('name', 'Jane');
// Із значенням за замовчуванням
$guest = ['name' => 'Guest'];
$user = $users->firstWhere('age', '>', 100) ?? $guest;
// Eloquent-колекції
$featured = Post::all()->firstWhere('featured', true);
// Кілька умов - first із callback
$user = $users->first(
fn($u) => $u['age'] > 30 && $u['name'] !== 'Bob'
);
Є дублікати email? Перевіряти вручну необов'язково.
unique() видаляє дублікати.
Як працює:
Залишає перше значення, інші прибирає.
Розширення:
Порада: uniqueStrict() враховує тип (1 !== "1").
$numbers = collect([1, 2, 2, 3, 3, 4]);
$unique = $numbers->unique();
// [1, 2, 3, 4]
// За ключем
$users = collect([
['id' => 1, 'email' => 'john@example.com'],
['id' => 2, 'email' => 'jane@example.com'],
['id' => 3, 'email' => 'john@example.com'],
]);
$uniqueByEmail = $users->unique('email');
// За callback
$products = collect([
['name' => 'iPhone', 'price' => 999],
['name' => 'Samsung', 'price' => 999],
['name' => 'iPad', 'price' => 799],
]);
$uniqueByPrice = $products->unique(fn($i) => $i['price']);
// Строге порівняння
collect([1, '1', 2, '2'])->unique(); // [1, 2]
collect([1, '1', 2, '2'])->uniqueStrict(); // [1, '1', 2, '2']
// Скинути ключі
$unique->values();
Виносить бізнес-правило в окремий об'єкт із промовистою назвою. Як комбінувати умови через AND/OR/NOT і де це краще за scope Eloquent.
Якщо обробляється 50 000 елементів і застосовується 10 методів, звичайна колекція створить 10 копій у пам'яті.
Lazy колекції обробляють один елемент за раз.
Як працює:
Елемент проходить через усі методи і лише потім переходить до наступного.
Коли варто використовувати:
Порада: перетворити назад у звичайну колекцію - all().
// Погано: багато копій у пам'яті
$result = collect($hugeArray)
->filter(...)
->map(...)
->sortBy(...)
->take(100);
// Добре: один елемент за раз
$result = collect($hugeArray)
->lazy()
->filter(...)
->map(...)
->sortBy(...)
->take(100)
->all();
// Великий CSV
$users = LazyCollection::make(function () {
$h = fopen('users.csv', 'r');
while ($line = fgets($h)) {
yield $line;
}
fclose($h);
})->map(fn($l) => str_getcsv($l));
// cursor() - вже lazy
User::cursor();
MKSine - це повноцінна CMS для Laravel-проєктів на основі Filament, що включає сторінки, пости, конструктор блоків, систему плагінів, теми, меню та медіабібліотеку. Розробник Міран Салехі створив рішення, яке дозволяє редакторам керувати контентом без написання коду.
Групує кілька змін у єдину транзакцію - усе або нічого. У Laravel роль виконує DB::transaction() з автокомітом, ролбеком і повтором при deadlock.
Потрібно подивитися стан колекції в середині ланцюга?
tap() дозволяє "підглянути" в колекцію, не змінюючи її.
Як працює:
Callback отримує колекцію, але повернуте значення ігнорується.
Сценарії:
Різниця з pipe():
$result = $users
->where('active', true)
->tap(fn($c) => logger("Active: {$c->count()}"))
->where('role', 'admin')
->tap(fn($c) => logger("Admins: {$c->count()}"))
->get();
// Порівняння
$collection->pipe(fn($c) => $c->count()); // повертає число
$collection->tap(fn($c) => $c->count()); // повертає колекцію
Матеріали за темою «Laravel»: усе, що ми писали про це українською. Нижче - суміжні теми, якщо шукаєте ширше.
Зараз опубліковано 208 матеріалів від 3 авторів. Останній матеріал - 30 жовтня 2026.