Нові методи перевірки наявності відносин Eloquent у Laravel 11.37

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 08 січня, 2025
Починаючи з нового релізу Laravel v11.37, розробники отримали безліч нових можливостей, включаючи нові методи відносин Eloquent та опцію для ігнорування регістру. Долучайтеся до нас, щоб дізнатися, як ці нововведення можуть покращити вашу роботу з Laravel

Минулого тижня команда 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