У Laravel 12.52.0 з’явився Factory makeMany() method

Перекладено ШІ 0 Laravel News 19 лютого, 2026

Laravel v12.52.0 приніс корисні новинки: makeMany() у фабриках, withoutAfterMaking()/withoutAfterCreating(), тимчасові URL для локальної файлової системи та атомарні записи в компіляторі Blade. Хочете дізнатися, як ці зміни спростять розробку та тестування?

Laravel v12.52.0 додає метод фабрики makeMany(), нові хелпери withoutAfterMaking() та withoutAfterCreating(), атомарні записи в компіляторі Blade для уникнення умов гонки і покращені трасування виключень для замикань та автономних функцій.

Основні нововведення:

  • Новий метод фабрики makeMany()
  • Хелпери withoutAfterMaking() та withoutAfterCreating() для фабрик
  • Підтримка temporaryUploadUrl() для локального файлового сховища
  • Атомарні записи в BladeCompiler для запобігання умовам гонки
  • Виправлення затримки в Mailable::later() і перевірки delay для queued mailables
  • Підтримка $preserveKeys у LazyCollection::random()
  • Строкові вирази для selectExpression()
  • Замикання та автономні функції тепер правильно відображаються в трасуваннях виключень
  • Численні виправлення помилок і внутрішні поліпшення

Що нового

Метод фабрики makeMany()

Фабрики тепер мають метод makeMany() як доповнення до createMany(). Якщо createMany() зберігає записи в базі, то makeMany() повертає колекцію інстансів моделей без збереження — зручно для створення кількох об'єктів у пам'яті під час unit-тестів або перетворень:

// Create multiple unsaved instances
$users = User::factory()->makeMany(3);
 
// Equivalent longhand
$users = User::factory()->count(3)->make();

Pull Request: #58795

Хелпери withoutAfterMaking() та withoutAfterCreating()

Два нові хелпери дозволяють пропускати колбеки afterMaking та afterCreating для конкретного виклику. Це корисно, коли колбеки налаштовують зв'язки або викликають побічні ефекти, які не потрібні в поточному тесті:

// Skip afterMaking callbacks
$user = User::factory()->withoutAfterMaking()->make();
 
// Skip afterCreating callbacks
$user = User::factory()->withoutAfterCreating()->create();

Pull Request: #58794

temporaryUploadUrl() для локального файлового сховища

Метод temporaryUploadUrl() тепер працює з драйвером local, тоді як раніше був доступний лише для хмарних драйверів типу S3. Тепер можна використовувати temporaryUploadUrl() в локальній розробці та тестах без переходу на хмарний драйвер:

$url = Storage::disk('local')->temporaryUploadUrl(
    'uploads/photo.jpg',
    now()->addMinutes(30)
);

Pull Request: #58499

Атомарні записи в BladeCompiler

Компілятор Blade тепер використовує атомарні записи при кешуванні скомпільованих view і inline component views. Раніше при одночасній компіляції одного view кількома процесами могла виникати умова гонки й пошкоджуватися файл кешу. Тепер спочатку запис у тимчасовий файл, а потім переміщення на місце усуває цю проблему.

Pull Requests: #58812, #58815

Виправлення затримки в Mailable::later() і перевірки delay

Mailable::later() неправильно застосовував delay до відправленого завдання SendQueuedMailable — це виправлено. Супутній PR додає підтримку delay у Mail::assertQueued(), щоб перевіряти, що mailable була поставлена в чергу з певною затримкою:

Mail::fake();
 
Mail::to('user@example.com')->later(now()->addMinutes(10), new WelcomeMail());
 
Mail::assertQueued(WelcomeMail::class, function ($mail) {
    return $mail->delay->equalTo(now()->addMinutes(10));
});

Pull Requests: #58765, #58787

Підтримка $preserveKeys у LazyCollection::random()

LazyCollection::random() тепер приймає параметр $preserveKeys, як і Collection::random(). Якщо він true, у результаті зберігаються оригінальні ключі:

$collection = LazyCollection::make(['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4]);
 
// Preserves original keys
$sample = $collection->random(2, preserveKeys: true);
// e.g. ['b' => 2, 'd' => 4]

Pull Request: #58791

Строкові вирази для selectExpression()

selectExpression() у query builder тепер приймає сирі рядки поряд з об'єктами Expression. Це зменшує бойлерплейт, коли потрібен один raw-вираз у select:

// Before
DB::table('orders')->selectExpression(DB::raw('SUM(total) as revenue'));
 
// After
DB::table('orders')->selectExpression('SUM(total) as revenue');

Pull Request: #58753

Заміки та автономні функції правильно відображаються в трасуваннях виключень

Трасування виключень тепер коректно показує імена замикань та автономних функцій замість загальних або порожніх міток. Це робить налагодження анонімних функцій і Closure-based route-обробників читабельнішим у сторінках помилок і логах.

Pull Request: #58879

Виправлення помилок та покращення

Черги та асинхронність:

  • Виправлено відкидання defer-колбеків при використанні sync-черги (#58745)
  • Повернене значення Batch::progress() приводиться до int (#58767)

База даних та Eloquent:

  • Виправлено повернення пустої Collection для JSON:API ресурсів, що не є моделями (#58752)
  • Кешовані касти об'єднуються лише для доступних атрибутів (#57627)
  • Відкотили перевірки точності стовпців SQL Server, які спричиняли регресії (#58888)
  • Строка підключення MySQL оновлена для сучасних клієнтів: --ssl-mode=DISABLED (#58786)

Тестування:

  • Додано опцію вимкнути ізоляцію префікса кешу для parallel-safe (#58801)

Middleware:

  • Портовано зміни withMiddleware з 13.x (#58798)

Покращення типів і документація:

Нотатки щодо оновлення

Для типових застосунків не очікується зламів. Відкат перевірок точності стовпців SQL Server відновлює поведінку до стану до v12.51.0 — якщо ви покладалися на ту перевірку, перегляньте свої SQL Server-міграції. Для повних деталей дивіться повний changelog перед оновленням.

Посилання

Популярні

Інше, що варто прочитати

173 Оновлено 01 червня, 2026

Використання повнотекстового пошуку в Laravel

Laravel пропонує потужні можливості повнотекстового пошуку за допомогою методів whereFullText та orWhereFullText, що дозволяють здійснювати складні запити до бази даних. Дізнайтеся, як реалізувати ефективний пошук для вашого блогу чи системи управління контентом

11 Оновлено 01 червня, 2026

Управління доступом у Filament за допомогою плагіна Shield

Дізнайтеся, як пакет Filament Shield забезпечує управління доступом до ваших панелей, ресурсів і віджетів у Laravel. Ця стаття розкриває основні можливості пакету, включаючи просту установку та підтримку багатокористувацьких середовищ — не пропустіть!

10 Оновлено 01 червня, 2026

Генерація документації в Laravel за допомогою штучного інтелекту

Docudoodle — це потужний пакет для генерації документації в Laravel, який допомагає легко аналізувати вашу кодову базу та створювати документацію за допомогою обраного вами AI. Чи готові ви дізнатися, як цей інструмент може спростити вашу роботу з документуванням коду? Читайте далі!