CQRS - розділення читання і запису
Розділяє операції зміни стану (команди) та читання (запити) на окремі моделі. Коли це виправдано у великих доменах і чому надмірне для CRUD.
Почніть вводити, щоб шукати по статтях, вакансіях, компаніях, проєктах, ресурсах, пакетах, подіях і користувачах.
Статті, новини, туторіали та переклади від учасників спільноти
Розділяє операції зміни стану (команди) та читання (запити) на окремі моделі. Коли це виправдано у великих доменах і чому надмірне для CRUD.
Deftform - це чистий і швидкий конструктор форм для Laravel-розробників, який робить те, що вам дійсно потрібно. З AI-помічником, вебхуками, інтеграціями та ціноутворенням без обов'язкової передплати.
Потрібно показати пости за категоріями? Вкладені цикли не потрібні.
groupBy() групує колекцію за ключем.
Як працює:
Повертає масив груп, де кожна група - окрема колекція.
Розширені можливості:
Порада: ідеально для аналітики, звітів і категоризації.
// Групування за категорією
$byCategory = $posts->groupBy('category_id');
// Групування за роком
$byYear = $posts->groupBy(fn($p) => $p->created_at->year);
// Доступ до груп
foreach ($byCategory as $categoryId => $posts) {
echo "Category {$categoryId}: {$posts->count()} posts\n";
}
// Кілька рівнів
$byYearMonth = $posts->groupBy([
fn($p) => $p->created_at->year,
fn($p) => $p->created_at->month,
]);
// Групування по зв'язку
$byPostTitle = $comments->groupBy('post.title');
// Практичний приклад - суми продажів
$report = $orders->groupBy('status')
->map(fn($group) => $group->sum('total'));
Потрібно прибрати частину елементів? Писати складні if не обов'язково.
filter() залишає елементи, що відповідають умові.
reject() прибирає елементи, що відповідають умові.
Різниця:
Розширено:
Для простих порівнянь краще where(), whereIn(), whereBetween().
Порада: filter() без callback прибирає всі falsy (null, false, 0, '', []).
// filter() - тільки активні
$active = $users->filter(fn($u) => $u->active === true);
// reject() - видалити неактивних
$active = $users->reject(fn($u) => $u->active === false);
// filter() без callback
$values = collect([1, 2, null, 3, false, '', 4]);
$cleaned = $values->filter();
// [1, 2, 3, 4]
// where()
$admins = $users->where('role', 'admin');
$verified = $users->where('email_verified_at', '!=', null);
// whereIn()
$staff = $users->whereIn('role', ['admin', 'moderator']);
// whereBetween()
$recent = $posts->whereBetween('created_at', [
now()->subDays(7),
now()
]);
// Комбінування фільтрів
$result = $users
->where('active', true)
->whereIn('role', ['admin', 'editor'])
->filter(fn($u) => $u->posts_count > 10);
Laravel 13.26 отримав метод Queue::forward(), який дозволяє перенаправляти черги та з'єднання централізовано. Тепер можна змінювати призначення черг без редагування десятків файлів - особливо корисно при міграції між Redis та хмарними сервісами або розділенні навантаження.
Laravel Tackle - пакет від Джордана Далтона, що запускає AI-агента як Artisan-команди всередині вашого додатка. Він інтегрується з фреймворком, може редагувати код, виправляти помилки, переглядати pull request'и та навіть самостійно лікувати невдалі черги завдань.
Jack McDade випустив безплатний аддон Mailables Viewer для Statamic, який автоматично знаходить усі Laravel-mailables у проєкті та дозволяє переглядати їх прямо в адмінці без додаткових preview-роутів та налаштувань.
Три споріднені підходи, що відділяють дані від представлення через проміжний шар. Чим відрізняються посередники і чому в Laravel базовий - MVC.
Потрібно обробити 10 000 елементів? Або API обмежує 100 запитів за хвилину?
chunk() розбиває колекцію на менші групи.
Сценарії:
Відмінність від query chunk():
Collection chunk() працює з уже завантаженими даними. Query chunk() завантажує дані з бази порціями.
Порада: поєднувати з sleep() для API rate limit.
// Поділ на частини по 100
$users = User::all();
$users->chunk(100)->each(function ($batch) {
$this->sendBatchEmail($batch);
});
// API rate limit
$products = collect($apiProducts);
$products->chunk(50)->each(function ($batch) {
$this->syncToDatabase($batch);
sleep(1);
});
// Прогрес
$done = 0;
$users->chunk(100)->each(function ($batch) use (&$done) {
$batch->each(fn($u) => $this->process($u));
$done += $batch->count();
echo "Progress: {$done}\n";
});
// Комбінування з іншими методами
$users->chunk(100)->map(function ($chunk) {
return $chunk->pluck('email');
});
Матеріали за темою «Laravel»: усе, що ми писали про це українською. Нижче - суміжні теми, якщо шукаєте ширше.
Зараз опубліковано 150 матеріалів від 3 авторів. Останній матеріал - 12 вересня 2026.