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
]);
}