Команда 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
- [12.x]
AbstractPaginatorмає реалізовуватиCanBeEscapedWhenCastToString— @gdebrauwer, Pull Request - [12.x] Додано метод
whereAttachedTo()в Eloquent — @bakerkretzmar, Pull Request - Зроблено Illuminate\Support\Uri макросябельним — @riesjart, Pull Request
- [12.x] Додано функції-хелпери для моделей/колекцій — @TimKunze96, Pull Request
- [12.x]: Використання char(36) для uuid типу на MariaDB < 10.7.0 — @boedah, Pull Request
- [12.x] Введення
toArrayв класComponentAttributeBag— @devajmeireles, Pull Request