Не могу отправить метаданные 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(),
            ]]);;
}
Другие вопросы по тегам