Не могу отправить метаданные paginate с response()->json
У меня есть API, и я хочу отправить некоторую информацию своим клиентам. Я использую коллекцию ресурсов, чтобы сделать это.
return response()->json([
'data' => ProductResource::collection(Product::orderBy('id', 'DESC')->paginate(8)),
'catdata' => CategoryResource::collection(Category::get()),
'status' => "200"
]);
Все работает, но метаданные пагинации не работают. Он не отправляет данные пагинации.
1 ответ
Ресурсы API не предназначены для использования друг с другом. Это означает, что Laravel не сможет определить, какие метаданные вам нужны, потому что вы конвертируете в JSON, прежде чем Laravel сможет его прочитать. Вам лучше разделить ваши ответы API, и ваши клиенты будут вызывать API дважды.
public function products()
{
return ProductResource::collection(Product::orderBy('id', 'DESC')->paginate(8));
}
public function categories()
{
return CategoryResource::collection(Category::get());
}
Вы также можете использовать additional
функционировать на вашем ProductResource::collection
вызов.
public function products()
{
return ProductResource::collection(Product::orderBy('id', 'DESC')->paginate(8))->additional(['meta' => [
'categories' => Category::get(),
]]);;
}