У 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()

Фабрики тепер мають метод 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

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

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

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

Тестування:

Middleware:

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

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

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

Посилання

Популярні

Logomark Logotype

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

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

Logomark Logotype

Nuxt 3 + Laravel Sanctum: Просте та надійне рішення для автентифікації вашого SPA та API

У сучасній веб-розробці аутентифікація є ключовою для захисту додатків і даних користувачів. Дізнайтеся, як модуль nuxt-sanctum-authentication спростить інтеграцію між Nuxt 3 та Laravel Sanctum, забезпечуючи надійний і зручний спосіб реалізації аутентифікації для вашого проєкту

Logomark Logotype

Перетворення даних у типобезпечні DTO за допомогою пакету Data Model

Досліджуйте новий пакет Data Model для PHP, який спрощує процес гідратації об'єктів без зайвих складнощів! Дізнайтеся, як впровадження типобезпечних об'єктів може революціонізувати ваш підхід до розробки, читаючи нашу статтю