Пагінація кількох моделей Eloquent за допомогою пакету Union Paginator

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 11 грудня, 2024
Вас цікавить, як інтегрувати дані з кількох моделей Eloquent в єдиний запит за допомогою SQL? У нашій статті ви дізнаєтеся, як використовувати пакет Laravel Union Paginator для досягнення узгодженої пагінації та налаштувань з різних джерел даних

Пакет Laravel Union Paginator, розроблений Austin White, об'єднує дані з кількох моделей Eloquent в один запит за допомогою SQL-об'єднань. За допомогою цього пакету ви можете отримати "послідовну пагінацію і налаштування для різних джерел даних".

Клас UnionPaginator налаштовується на основі моделей, які розширюють базовий клас Eloquent Model. Ви можете контролювати перетворення записів кожної моделі і викликати paginate() на екземплярі UnionPaginator після налаштування:

use AustinW\UnionPaginator\UnionPaginator;
 
// Визначаємо моделі
$paginator = UnionPaginator::for([User::class, Post::class]);
 
// Застосовуємо перетворення
$paginator->transform(User::class, fn($record) => [
    'id' => $record->id,
    'name' => $record->name,
])->transform(Post::class, fn($record) => [
    'title' => $record->title,
    'created_at' => $record->created_at,
]);
 
// Пагінація результатів
$paginatedResults = $paginator->paginate(10);
 
// Проходимо через пагіновані елементи
foreach ($paginatedResults->items() as $item) {
    // Обробляємо пагінований елемент
}

Пакет Union Paginator сумісний з Laravel v10 та Laravel v11. Щоб почати працювати з цим пакетом, відвідайте його на GitHub за посиланням austinw/laravel-union-paginator