Минулого тижня команда Laravel випустила версію v11.37, що містить нові методи зв'язків Eloquent, можливість ігнорування регістру в Str::is(), додавання трейту Dumpable до екземпляра Uri та інші покращення.
# Додавання трейту Dumpable до Uri
Адріан Нюрнбергер додав трейт Dumpable до класу Uri, що дозволяє викликати dump() і dd() на екземплярі Uri. Це дає змогу виводити інформацію в будь-якій точці ланцюга вашого екземпляра Uri або виводити й завершувати виконання через dd():

# Додавання опції "Ігнорувати регістр" до Str::is()
Стів Бауман додав можливість ігнорувати регістр під час використання методу Str::is() та екземпляра Stringable. Це дозволяє розробникам відмовитися від точного співставлення регістру, аналогічно до роботи Str::contains():

# Нові методи зв'язків Eloquent
Андрій Хеллдар запропонував методи зв'язків whereDoesntHaveRelation та whereDoesntHaveMorph, які є протилежними до існуючих запитів на існування зв'язків.
Приклади whereDoesntHaveRelation:
// До
User::whereDoesntHave('comments', function ($query) {
$query->where('created_at', '>', now()->subDay());
}) -> get();
// Після
User::whereDoesntHaveRelation(
'comments', 'created_at', '>', now()->subDay()
) -> get();
// Інший приклад
User::whereDoesntHaveRelation(
'comments', 'is_approved', false
) -> get();
Приклади whereMorphDoesntHaveRelation:
// До
User::whereDoesntHaveMorph('comments', [Post::class, Video::class], function ($query) {
$query->where('created_at', '>', now()->subDay());
}) -> get();
// Після
User::whereMorphDoesntHaveRelation(
'comments', [Post::class, Video::class], 'created_at', '>', now()->subDay()
) -> get();
User::whereMorphDoesntHaveRelation(
'comments', [Post::class, Video::class], 'is_approved', false
) -> get();
# Додавання assertFailedWith до трейту InteractsWithQueue
Тедді Франкфорт запропонував метод assertFailedWith для трейту InteractsWithQueue, який дозволяє перевіряти виняток у тестах:
use App\Jobs\ProcessPodcast;
use App\Exceptions\MyException;
$job = new ProcessPodcast()->withFakeQueueInteractions();
$job->assertFailedWith('whoops');
$job->assertFailedWith(MyException::class);
$job->assertFailedWith(new MyException);
$job->assertFailedWith(new MyException(message: 'whoops'));
$job->assertFailedWith(new MyException(message: 'whoops', code: 123));
# Примітки до випуску
Ознайомитися з повним списком нових функцій та оновлень можна нижче, а також переглянути різницю між 11.36.0 та 11.37.0 на GitHub. Наступні примітки є безпосередньо з changelog:
# v11.37.0
- [11.x] Оновлено Collection::hasAny від @JeftaAtSiip в https://github.com/laravel/framework/pull/53963
- [11.x] Оновлено DetectsLostConnections trait від @holgerk в https://github.com/laravel/framework/pull/53966
- Виправлення: (Queue Worker) подія JobPopped не викликалася, коли $popCallbacks повертає null від @rudenav в https://github.com/laravel/framework/pull/53962
- [11.x] Додавання трейту
DumpableдоUriвід @nuernbergerA в https://github.com/laravel/framework/pull/53960 - Виправлення: Обробка значень змішаного типу в compileInsert від @alipadron в https://github.com/laravel/framework/pull/53948
- [11.x] Додано опцію
$ignoreCaseдоStr::isвід @stevebauman в https://github.com/laravel/framework/pull/53981 - [11.x] Оновлення залежностей компонентів від @crynobone в https://github.com/laravel/framework/pull/53975
- [11.x] Оновлено метод
withoutQueryв Uri для прийому рядкових або масивних даних від @1weiho в https://github.com/laravel/framework/pull/53973 - [11.x] Виправлено, що кешована точка доступу здоров’я не працює в режимі обслуговування від @crynobone в https://github.com/laravel/framework/pull/53974
- Додавання типів PHPDoc від @shaedrich в https://github.com/laravel/framework/pull/53984
- [11.x] Дозвіл передавати bool у фасад Http@preventStrayRequests() від @cosmastech в https://github.com/laravel/framework/pull/53992
- [11.x] Використання Str::wrap() замість вкладення Str::start() у Str::finish() від @shaedrich в https://github.com/laravel/framework/pull/53987
- Виправлення діапазону днів у docblock від @timacdonald в https://github.com/laravel/framework/pull/53985
- [11.x] Виправлення
Illuminate\Http\Responseдля виведення пустого рядка, якщо$contentвстановлено наnullвід @crynobone в https://github.com/laravel/framework/pull/53872 - [11.x] Виправлення/поліпшення обробки відповіді Resend transport від @markovic-nikola в https://github.com/laravel/framework/pull/54004
- [11.x] Оновлення документації View::withErrors() для відображення підтримки рядкових параметрів від @cheack в https://github.com/laravel/framework/pull/54009
- [11.x] Поліпшення обробки відповіді Resend transport - виправлення від @markovic-nikola в https://github.com/laravel/framework/pull/54006
- [11.x] Додавання нових методів Eloquent:
whereDoesntHaveRelation,whereMorphDoesntHaveRelationта їх варіацій зORвід @andrey-helldar в https://github.com/laravel/framework/pull/53996 - [11.x] Освіження бази даних, якщо транзакція
RefreshDatabaseбула зафіксована від @SjorsO в https://github.com/laravel/framework/pull/53997 - [11.x] Додавання assertFailedWith до трейту InteractsWithQueue від @teddy-francfort в https://github.com/laravel/framework/pull/53980
- Швидке виправлення документації від @mathiasgrimm в https://github.com/laravel/framework/pull/54040
- [11.x] Дозволити використання
Illuminate\Support\Uriпри тестуванні HTTP-запитів від @crynobone в https://github.com/laravel/framework/pull/54038 - [11.x] Додавання тестів для перекриття маршрутів від @mathiasgrimm в https://github.com/laravel/framework/pull/54050
- [11.x] Додавання тестів для
nullта*ключа вdata_getвід @jwjenkin в https://github.com/laravel/framework/pull/54059