Laravel пагинатор для many to many

У меня есть таблица parts, part_shop, shops

В модели Shops определено many to many отношение

public function parts()
{
    return $this->belongsToMany(Part::class)->withPivot('count');
}

Также есть ShopController, в нём в index мне нужно загрузить данные о магазине, а также товары из этого магазина с пагинацией.

Вот рабочий вариант, но здесь shop и parts - разные переменные.

public function index(Request $request, string $shop_slug) {
    $shop = Shop::select('id', 'name', 'description', 'warranty', 'delivery_time')
        ->where('slug', $shop_slug)
        ->first();

    $parts = $shop->parts()->paginate(3);

    return Inertia::render('Shop', [
        'shop' => $shop,
        'parts' => $parts
    ]);
}

Мне бы хотелось чтобы пагинатор был доступен в shop->parts. Я пробовал через with. Но вместо пагинатора, там 3 первых элемента элемента, но почему?

public function index(Request $request, string $shop_slug) {
    $shop = Shop::select('id', 'name', 'description', 'warranty', 'delivery_time')
        ->where('slug', $shop_slug)
        ->with(['parts' => function($q) {
            $q->paginate(3);
        }])
        ->first();

    return Inertia::render('Shop', [
        'shop' => $shop,
    ]);
}


Ответы (1 шт):

Автор решения: Yauhen Kib

Ну так воткни их туда.. Запросов в базу кажется меньше не станет.

public function index(Request $request, string $shop_slug) {
    $shop = Shop::select('id', 'name', 'description', 'warranty', 'delivery_time')
        ->where('slug', $shop_slug)
        ->first();

    $shop->parts = $shop->parts()->paginate(3);

    return Inertia::render('Shop', [
        'shop' => $shop
    ]);
}
→ Ссылка