Допоміжні функції ресурсів моделі в Laravel 12.7

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 09 квітня, 2025
Остання версія Laravel v12.7.0 принесла безліч цікавих нововведень, зокрема нові допоміжні методи для ресурсів та метод `whereAttachedTo()` для спрощеного запиту до зв'язаних моделей. Чи готові покращити свій код і дізнатися більше про ці нові можливості? Читайте далі!

Команда Laravel нещодавно випустила версію v12.7.0, що включає дві чудові нові функції: функції-хелпери для моделей та метод whereAttachedTo() в Eloquent.

# Функції-хелпери для моделей

Тім Кунце запропонував хелпери, які роблять створення екземплярів ресурсів плавнішим при використанні моделі або колекції Eloquent:

// До
UserResource::make(User::find(1));
UserResource::collection(User::query()->active()->paginate());
 
// Після
User::find(1)->toResource(UserResource::class);
 
User::query()->active()->paginate()->toResourceCollection(UserResource::class);

Метод toResource() можна також викликати без аргументів, і модель автоматично визначить ім'я ресурсу. Звичайно, ви можете вказати ресурс, але, використовуючи конвенції Laravel, це можна пропустити:

User::find(1)->toResource();

Деталі обговорення та реалізації можна знайти у Pull Request #55107.

# Метод whereAttachedTo() у Query Builder

Джекоб Бейкер-Кретцмар запропонував метод whereAttachedTo() для спрощення отримання записів, "прикріплених" до моделі через відношення BelongsToMany:

$tags = Tag::where('created_at', '>', now()->subMonth())->get();
 
// До
$taggedPosts = Post::whereHas('tags', function ($query) use ($tags) {
    $query->whereKey($tags);
}) ->get();
 
// Після
$taggedPosts = Post::whereAttachedTo($tags)->get();
 
// Після з явним ім'ям зв'язку
$taggedPosts = Post::whereAttachedTo($tags, 'tags')->get();

# Зробити клас Uri макросябельним

Подібно до багатьох інших класів, які мають трейти Macroable, Річард ван Баарсен додав цей трейт до класу URI:

use Illuminate\Support\Uri;
 
Uri::macro('docs', fn () => $this->withPath('docs'));
new Uri('https://laravel.com/')->docs(); // https://laravel.com/docs

# Примітки до релізу

Ви можете ознайомитися з повним списком нових функцій та оновлень нижче, а також з різницями між версіями 12.6.0 та 12.7.0 на GitHub. Наступні примітки взято безпосередньо з changelog:

# v12.7.0