Минулого тижня команда 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Встановлення Xdebug може бути складним завданням, але в цій статті ми розкриємо, як швидко та просто налаштувати його за допомогою Docker на прикладі Laravel. Дочитайте до кінця, щоб дізнатися, як за кілька хвилин зробити Xdebug вашим надійним помічником у розробці
Досліджуйте новий пакет Data Model для PHP, який спрощує процес гідратації об'єктів без зайвих складнощів! Дізнайтеся, як впровадження типобезпечних об'єктів може революціонізувати ваш підхід до розробки, читаючи нашу статтю
Зазирніть у світ Laravel, де потужний CLI-фреймворк відкриває нові можливості для розробки командного інтерфейсу. Дізнайтеся, як створити просту утиліту для перевірки акцій, яка працює з Docker, та які переваги це може принести у вашому проєкті!