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

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

Андрій Хеллдар запропонував методи зв'язків 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, який дозволяє перевіряти виняток у тестах:
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:
Dumpable до Uri від @nuernbergerA в https://github.com/laravel/framework/pull/53960$ignoreCase до Str::is від @stevebauman в https://github.com/laravel/framework/pull/53981withoutQuery в Uri для прийому рядкових або масивних даних від @1weiho в https://github.com/laravel/framework/pull/53973Illuminate\Http\Response для виведення пустого рядка, якщо $content встановлено на null від @crynobone в https://github.com/laravel/framework/pull/53872whereDoesntHaveRelation, whereMorphDoesntHaveRelation та їх варіацій з OR від @andrey-helldar в https://github.com/laravel/framework/pull/53996RefreshDatabase була зафіксована від @SjorsO в https://github.com/laravel/framework/pull/53997Illuminate\Support\Uri при тестуванні HTTP-запитів від @crynobone в https://github.com/laravel/framework/pull/54038null та * ключа в data_get від @jwjenkin в https://github.com/laravel/framework/pull/54059