Увійти Реєстрація
Вакансії
Вакансії Laravel Компанії Статистика
Підготовка
Як підготуватися < href="https://laravelukraine.com/interviews" wire:navigate.hover class="flex items-center gap-3 rounded-md px-3 py-2 text-base font-medium text-gray-600 hover:bg-gray-50 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-900 dark:hover:text-white" >Співбесіди Тестування Документація
Блог
Всі статті Серії
Екосистема
Пакети Ресурси Проєкти Інструменти Події Відео
Інше
Про нас Реклама
Tips 14 вересня 2026

collapse() - Сплющення вкладених колекцій

Маєте масив масивів? Потрібен один суцільний?

collapse() сплющує лише один рівень.

Приклади використання:

  • Об'єднання кількох колекцій
  • Сплющення згрупованих даних
  • Комбінування результатів запитів

Відмінність від flatten():

  • collapse() - один рівень
  • flatten() - рекурсивно всі рівні

Порада: використовуйте flatten() для глибоко вкладених структур.

// Масив масивів
$data = collect([
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9],
]);

$flat = $data->collapse();
// [1, 2, 3, 4, 5, 6, 7, 8, 9]

// Колекції у колекції
$tags = collect([
  collect(['php', 'laravel']),
  collect(['javascript', 'vue']),
  collect(['mysql', 'redis']),
]);

$allTags = $tags->collapse();
// ['php', 'laravel', 'javascript', 'vue', 'mysql', 'redis']

// Приклад: об'єднання дозволів користувача з ролей
$user->roles->map(fn($role) => $role->permissions)->collapse();

// Групування, а потім collapse
$orders = Order::all()
  ->groupBy('user_id')
  ->map(fn($userOrders) => $userOrders->pluck('items'))
  ->collapse();
// Відмінність collapse vs flatten
$nested = collect([
  [1, [2, [3, 4]]],
  [5, [6, [7, 8]]],
]);

$nested->collapse(); // [1, [2, [3, 4]], 5, [6, [7, 8]]]
$nested->flatten();  // [1, 2, 3, 4, 5, 6, 7, 8]

// Об'єднання масивів із кількох моделей
$allEmails = collect([$users, $admins, $moderators])
  ->map(fn($group) => $group->pluck('email'))
  ->collapse()
  ->unique();

// Теги з постів
$uniqueTags = Post::with('tags')->get()
  ->map(fn($p) => $p->tags)
  ->collapse()
  ->unique('id');

// Комбінування результатів пошуку
$results = collect([$localResults, $apiResults])
  ->collapse()
  ->sortByDesc('relevance');

Читати в документації

Коментарі

Увійдіть, щоб залишити коментар

Будьте першим, хто залишить коментар!

Інші поради

Tips 13 листопада 2026

current_password - перевірка перед змінами

Змінюєте пароль або email? Спочатку перевірте поточний пароль.

current_password робить перевірку автоматично.

Безпека:

захищає від несанкціонованих змін.

Коли корисно:

  • Зміна пароля
  • Зміна email
  • Видалення акаунта
  • Чутливі налаштування

Порада: використовуйте разом з confirmed для нового пароля.

public function rules()
{
  return [
    'current_password' => 'required|current_password',
    'new_password' => [
      'required', 'confirmed',
      'different:current_password',
    ],
    'email' => 'sometimes|required|email|unique:users',
  ];
}
Tips 11 листопада 2026

starts_with і ends_with - перевірка префікса/суфікса

Поле має починатися або закінчуватися певним значенням?

starts_with і ends_with валідуюють “афікси”.

Коли корисно:

  • URL/протоколи
  • Домени email
  • Назви файлів/розширення
  • Формати кодів

Кілька значень:

список через кому.

Порада: для складніших кейсів — regex.

public function rules()
{
  return [
    'website' => 'required|url|starts_with:https://,http://',
    'email' => 'required|email|ends_with:@company.com',
    'filename' => 'required|string|ends_with:.jpg,.png,.gif',
    'api_key' => 'required|string|starts_with:sk_live_,sk_test_',
  ];
}
Tips 09 листопада 2026

size - розмір для рядків, файлів, чисел і масивів

Одне правило — різні типи.

size працює по-різному залежно від типу:

  • Рядки: кількість символів
  • Числа: точне значення
  • Файли: кілобайти
  • Масиви: кількість елементів

Порада: для діапазонів частіше підходять min/max або between.

public function rules()
{
  return [
    'code' => 'required|string|size:10',
    'amount' => 'required|numeric|size:100',
    'document' => 'required|file|size:5120', // 5MB у KB
    'tags' => 'required|array|size:3',
  ];
}
Tips 06 листопада 2026

array - валідація вкладених даних

Валідуєте масиви та вкладені структури?

Dot-нотація робить це просто.

Синтаксис:

  • field.* — кожен елемент масиву
  • field.*.key — вкладений ключ у кожному елементі
  • field.key — конкретний ключ

Коли корисно:

  • Bulk-операції
  • Масиви полів у формах
  • API payload

Порада: комбінуйте з distinct, unique, exists.

public function rules()
{
  return [
    'users' => 'required|array',
    'users.*.name' => 'required|string|max:255',
    'users.*.email' => 'required|email|distinct',

    'items' => 'required|array',
    'items.*.product_id' => 'required|exists:products,id',
    'items.*.quantity' => 'required|integer|min:1',
  ];
}
Tips 04 листопада 2026

regex - валідація за шаблоном

Потрібна кастомна перевірка формату?

regex використовує регулярні вирази.

Типові кейси:

  • Телефони
  • Поштові індекси
  • Алфавітно-цифрові коди
  • Власні формати

Безпека:

Екрануйте/обережно формуйте патерни, якщо туди потрапляє ввід користувача.

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

public function rules()
{
  return [
    'phone' => ['required', 'regex:/^[0-9]{10}$/'],
    'slug' => [
      'required',
      'regex:/^[a-z0-9]+(?:-[a-z0-9]+)*$/',
    ],
    // складніший патерн краще винести в кастомне правило
    'password' => ['required', new StrongPassword],
  ];
}
Завантаження...