Laravel v12.52.0 додає метод фабрики makeMany(), нові хелпери withoutAfterMaking() та withoutAfterCreating(), атомарні записи в компіляторі Blade для уникнення умов гонки і покращені трасування виключень для замикань та автономних функцій.
Основні нововведення:
makeMany()withoutAfterMaking() та withoutAfterCreating() для фабрикtemporaryUploadUrl() для локального файлового сховищаMailable::later() і перевірки delay для queued mailables$preserveKeys у LazyCollection::random()selectExpression()Фабрики тепер мають метод 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
Два нові хелпери дозволяють пропускати колбеки 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
Компілятор Blade тепер використовує атомарні записи при кешуванні скомпільованих view і inline component views. Раніше при одночасній компіляції одного view кількома процесами могла виникати умова гонки й пошкоджуватися файл кешу. Тепер спочатку запис у тимчасовий файл, а потім переміщення на місце усуває цю проблему.
Mailable::later() і перевірки delayMailable::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));
});
$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
Черги та асинхронність:
Batch::progress() приводиться до int (#58767)База даних та Eloquent:
Collection для JSON:API ресурсів, що не є моделями (#58752)--ssl-mode=DISABLED (#58786)Тестування:
Middleware:
withMiddleware з 13.x (#58798)Покращення типів і документація:
@return у докблоках (#58746, #58764, #58774, #58805)Throwable до повних кваліфікованих імен (#58802)Для типових застосунків не очікується зламів. Відкат перевірок точності стовпців SQL Server відновлює поведінку до стану до v12.51.0 — якщо ви покладалися на ту перевірку, перегляньте свої SQL Server-міграції. Для повних деталей дивіться повний changelog перед оновленням.
Laravel пропонує потужні можливості повнотекстового пошуку за допомогою методів whereFullText та orWhereFullText, що дозволяють здійснювати складні запити до бази даних. Дізнайтеся, як реалізувати ефективний пошук для вашого блогу чи системи управління контентом
У сучасній веб-розробці аутентифікація є ключовою для захисту додатків і даних користувачів. Дізнайтеся, як модуль nuxt-sanctum-authentication спростить інтеграцію між Nuxt 3 та Laravel Sanctum, забезпечуючи надійний і зручний спосіб реалізації аутентифікації для вашого проєкту
Досліджуйте новий пакет Data Model для PHP, який спрощує процес гідратації об'єктів без зайвих складнощів! Дізнайтеся, як впровадження типобезпечних об'єктів може революціонізувати ваш підхід до розробки, читаючи нашу статтю