Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама

Статті за тегом «PHP»

Статті, новини, туторіали та переклади від учасників спільноти

No results.
Tips 24 серпня 2026

groupBy() - організація даних як у таблиці

Потрібно показати пости за категоріями? Вкладені цикли не потрібні.

groupBy() групує колекцію за ключем.

Як працює:

Повертає масив груп, де кожна група - окрема колекція.

Розширені можливості:

  • Групування за callback
  • Кілька рівнів групування
  • Dot notation

Порада: ідеально для аналітики, звітів і категоризації.

// Групування за категорією
$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'));
Tips 21 серпня 2026

filter() vs reject() - очищення даних

Потрібно прибрати частину елементів? Писати складні if не обов'язково.

filter() залишає елементи, що відповідають умові. reject() прибирає елементи, що відповідають умові.

Різниця:

  • filter() - залишає truthy
  • reject() - прибирає truthy
  • Обидва повертають нову колекцію

Розширено:

Для простих порівнянь краще 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);
Tips 19 серпня 2026

chunk() - поділ даних на частини

Потрібно обробити 10 000 елементів? Або API обмежує 100 запитів за хвилину?

chunk() розбиває колекцію на менші групи.

Сценарії:

  • Обмеження API
  • Пакетна обробка
  • Керування пам'яттю
  • Прогрес-бар

Відмінність від 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');
});
Tips 17 серпня 2026

map() vs transform() - трансформація колекцій

Потрібно змінити кожен елемент колекції?

map() і transform() роблять це, але працюють по-різному.

Різниця:

  • map() повертає НОВУ колекцію, оригінал залишається без змін
  • transform() змінює оригінальну колекцію

Що коли використовувати:

  • map() - коли початкові дані потрібні пізніше
  • transform() - коли треба зекономити пам'ять на великих колекціях

Порада: map() дозволяє повністю змінювати структуру, transform() зберігає ключі.

// map() - створює нову колекцію
$users = User::all();
$names = $users->map(function ($user) {
  return strtoupper($user->name);
});

// transform() - змінює оригінал
$users = User::all();
$users->transform(function ($user) {
  $user->name = strtoupper($user->name);
  return $user;
});

// map() з короткими функціями
$prices = collect([100, 200, 300]);
$withTax = $prices->map(fn($p) => $p * 1.2);

// Повна зміна структури
$formatted = $users->map(fn($user) => [
  'id' => $user->id,
  'label' => "{$user->name} ({$user->email})"
]);

// mapWithKeys - власні ключі
$users->mapWithKeys(fn($user) =>
  [$user->email => $user->name]
);
Tips 14 серпня 2026

pluck() - витягуй значення професійно

Потрібен масив ID? Організовувати цикл і додавати значення вручну не потрібно.

pluck() дістає значення стовпця в простий масив. В один рядок.

Розширені можливості:

  • Pluck із ключем - створює асоціативний масив
  • Pluck у зв'язках - без N+1
  • Pluck на кілька рівнів - через dot notation

Коли варто використовувати:

  • Формування select-опцій
  • Отримання ID для whereIn()
  • Створення lookup-масивів

Порада: використовувати pluck() безпосередньо на query builder - ефективніше, ніж завантажувати моделі.

3
// Погано: цикл і ручне збирання
$ids = [];
foreach ($users as $user) {
  $ids[] = $user->id;
}

// Добре: один рядок
$ids = $users->pluck('id');
// [1, 2, 3, 4, 5]

// Із ключем
$userNames = $users->pluck('name', 'id');
// [1 => 'John', 2 => 'Jane', 3 => 'Bob']

// Безпосередньо з бази - ефективніше
$emails = User::pluck('email');
$emailsById = User::pluck('email', 'id');

// Dot notation
$posts = Post::with('author')->get();
$authorNames = $posts->pluck('author.name');

// Кілька рівнів
$comments = Comment::with('post.author')->get();
$authors = $comments->pluck('post.author.name');

// Для select
$countries = Country::pluck('name', 'code');
// ['US' => 'United States', 'GB' => 'United Kingdom']
Кеш результатів запитів: Eloquent під тегами
Посібники 13 серпня 2026
Як будувався laravelukraine.com

Кеш результатів запитів: Eloquent під тегами

Прибравши зайві запити, беремося за ті, що лишилися дорогими. Кеш результатів Eloquent-запитів через трейт Cacheable з автоматичною інвалідацією за тегами - найглибший із двох рівнів кешу, якими ми тримаємо origin під навалою AI-краулерів.

64

Матеріали за темою «PHP»: усе, що ми писали про це українською. Нижче - суміжні теми, якщо шукаєте ширше.

Зараз опубліковано 87 матеріалів від 3 авторів. Останній матеріал - 11 вересня 2026.