Команда 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()
для спрощення отримання записів, "прикріплених" до моделі через відношення 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();
Подібно до багатьох інших класів, які мають трейти 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:
AbstractPaginator
має реалізовувати CanBeEscapedWhenCastToString
— @gdebrauwer, Pull RequestwhereAttachedTo()
в Eloquent — @bakerkretzmar, Pull RequesttoArray
в клас ComponentAttributeBag
— @devajmeireles, Pull Request