Команда Laravel випустила версію v11.42, що включає нові шорткати для відносних дат, гнучку числову валідацію, JSON-ствердження для потокового контенту та багато іншого
# Шорткати для відносних дат
Jason McCreary додав методи шорткатів для відносних дат у конструктор запитів, що дозволяє обмежувати дати в полях, наприклад, для пошуку записів у минулому, майбутньому, сьогодні, після сьогоднішнього дня тощо:
DB::table('invoices')
->wherePast('due_at')
->get();
DB::table('invoices')
->whereFuture('due_at')
->get();
DB::table('invoices')
->whereNowOrPast('due_at')
->get();
DB::table('invoices')
->whereNowOrFuture('due_at')
->get();
DB::table('invoices')
->whereToday('due_at')
->get();
DB::table('invoices')
->whereBeforeToday('due_at')
->get();
DB::table('invoices')
->whereAfterToday('due_at')
->get();
Крім вказаних вище методів, також включені варіанти or та not, а також можливість передавати масив назв колонок:
Усі ці методи мають варіанти
where,orіorWhereNot. Всі методи також приймають масив назв колонок як перший аргумент. МетодwherePastіwhereFutureмають необов'язковий другий аргумент для встановлення$now.
Більш детально про реалізацію можна дізнатися в Pull Request #54408.
# Гнучка числова валідація
Carlos Junior впровадив клас гнучкої числової валідації для зручного визначення правил числової валідації:
// До
$rules = [
'score' => 'numeric|integer|multiple_of:10|lte:some_field|max:100',
];
// Після
$rules = [
'score' => [
Rule::numeric()
->integer()
->multipleOf(10)
->lessThanOrEqual('some_field')
->max(100),
],
];
# Метод "missing" у Context
Vincent Bergeron додав методи missing() та missingHidden() у службу Context, які повертають булеве значення, якщо ключ контексту відсутній:
Context::add('url', $request->url());
Context::addHidden('hidden_url', $request->url());
Context::missing('url'); // false
Context::missing('missing_key'); // true
Context::missingHidden('url'); // true
Context::missingHidden('hidden_url'); // false
# JSON-ствердження для потокового контенту
Günther Debrauwer додав можливість використовувати JSON-ствердження для потокових JSON-відповідей:
Route::get('/users', function () {
return response()->streamJson([
'data' => User::cursor(),
]);
});
$this->getJson('/users')
->assertJsonCount(10, 'data')
->assertJsonPath('data.*.id', $users->pluck('id')->all());
# Примітки до випуску
Повний список нових функцій та оновлень можна переглянути нижче, також доступний порівняльний аналіз між 11.41.0 та 11.42.0 на GitHub. Нижче наведено примітки до випуску, що безпосередньо взяті з чейнджлогів:
# v11.42.0
- документація: уточнено використання hasOption() від @jezmck у https://github.com/laravel/framework/pull/54415
- Поліпшення тестування від @crynobone у https://github.com/laravel/framework/pull/54427
- [11.x] додано генерики до методів ArrayAccess Paginator від @taka-oyama у https://github.com/laravel/framework/pull/54428
- [11.x] виправлено документацію для коду, що викликає
enum_value()від @cosmastech у https://github.com/laravel/framework/pull/54432 - [11.x] виправлено assertContent у тестах Laravel, що відповідають об'єкту Symfony Response від @tben у https://github.com/laravel/framework/pull/54467
- [11.x] додано підтримку вищого порядку повідомлень для last від @fernandokbs у https://github.com/laravel/framework/pull/54459
- [11.x] тестування бази даних впливає на дзвінки Artisan від @nivseb у https://github.com/laravel/framework/pull/54458
- [11.x] додано точність до
Number::currency()від @benjibee у https://github.com/laravel/framework/pull/54456 - [11.x] додано генерики до лінявих запитів від @axlon у https://github.com/laravel/framework/pull/54453
- [11.x] злиття в нові вантажі з вкладених запитів від @ollieread у https://github.com/laravel/framework/pull/54455
- [11.x] гнучка числова валідація від @xoesae у https://github.com/laravel/framework/pull/54425
- [11.x] виправлено касти +
withAttributesвід @tontonsb у https://github.com/laravel/framework/pull/54422 - [11.x] впевненість у пакетних завданнях насправді є тривалими партіями від @josepostiga у https://github.com/laravel/framework/pull/54442
- [11.x] оновлено PHPStan до 2.x від @tamiroh у https://github.com/laravel/framework/pull/53716
- Поліпшення тестування від @crynobone у https://github.com/laravel/framework/pull/54475
- додано шорткати для відносних дат до Query Builder від @jasonmccreary у https://github.com/laravel/framework/pull/54408
- [11.x] feat: покращено типізацію замикань у QueriesRelationships від @calebdw у https://github.com/laravel/framework/pull/54452
- [11.x] виправлено метод explodeExplicitRule для підтримки числової валідації від @mrvipchien у https://github.com/laravel/framework/pull/54478
- додано підтримку колбеків
Builderпри клонуванні від @ralphjsmit у https://github.com/laravel/framework/pull/54477 - Підтримка відносних шляхів до баз даних SQLite від @LukeTowers у https://github.com/laravel/framework/pull/54480
- [11.x] Where не має nullable morph від @liamduckett у https://github.com/laravel/framework/pull/54363
- [11.x] додано можливість пропуску міграцій у тестах від @cosmastech у https://github.com/laravel/framework/pull/54441
- Тести інтеграції черги з Redis Cluster від @vadimonus у https://github.com/laravel/framework/pull/54218
- [11.x] оптимізовано
PendingBatch@ensureJobIsBatchableвід @cosmastech у https://github.com/laravel/framework/pull/54485 - [11.x] підтримка PHPUnit 12.0 від @crynobone у https://github.com/laravel/framework/pull/54316
- [11.x] виправлено написання в коментарі від @lorenzolosa у https://github.com/laravel/framework/pull/54503
- [11.x] додано метод "missing" у Context від @vbergerondev у https://github.com/laravel/framework/pull/54499
- [11.x] feat: додано генерики до методів Container від @MrMeshok у https://github.com/laravel/framework/pull/54543
- [11.x] додано метод setAssetRoot до класу UrlGenerator від @ollieread у https://github.com/laravel/framework/pull/54530
- [11.x] обробка перевірки на null у Str::startsWith та Str::endsWith від @onairmarc у https://github.com/laravel/framework/pull/54520
- [11.x] поліпшено перевірку для відносних баз даних SQLite від @LukeTowers у https://github.com/laravel/framework/pull/54513
- Скасовано "[11.x] використання Str::wrap() замість вкладеного Str::start() всередині Str::finish()" від @shaedrich у https://github.com/laravel/framework/pull/54528
- [11.x] пакети завдань з Redis Cluster від @vadimonus у https://github.com/laravel/framework/pull/54522
- [11.x] виправлення: вказано тип TClass generic у Container від @MrMeshok у https://github.com/laravel/framework/pull/54545
- [11.x] покращено документацію для карт морфів у
Relationвід @cosmastech у https://github.com/laravel/framework/pull/54560 - документація: виправлено повернення типу для методу initializeSignal від @nzsys у https://github.com/laravel/framework/pull/54553
- [11.x] додано підтримку середніх компонентів та обробників неуспішних записів на подіях, що передаються від @Jacobs63 у https://github.com/laravel/framework/pull/54562
- [11.x] JSON-ствердження для потокового контенту від @gdebrauwer у https://github.com/laravel/framework/pull/54565