Laravel 5

Eloquent : recherche avec pagination +

  • Avatar de FabriceCollignon
    Membre depuis :
    06/11/2019
    Messages :
    1

    Bonjour à tous,

    Pour un client, je suis en train de développer une API pour un catalogue de livres en ligne et je sèche sur une fonctionnalité, ou plus précisément sur une partie de cette fonctionnalité.

    Un exemple de ce que je cherche à obtenir : https://bibliotheque.braille.be/fr/catalogue?filters%5Bsearch%5D=King

    On a à gauche une colonne de sous-filtres qui se base sur l'ensemble des résultats de la recherche.
    Et à droite, la liste des livres avec pagination.

    Est-ce que vous avez une idée de comment je peux construire ma requête pour avoir ET la pagination ET les "filtres" se basant sur l'ensemble du résultat de la recherche ?

    C'est probablement bête comme chou, mais probablement trop la tête dans le guidon que pour trouver la solution...

    Ce que j'utilise pour le moment :

    • un Controller qui reçoit en POST les champs du formulaire de recherche
    • un Service qui exécute la recherche dans la db
    • une Resource qui est retournée au front-end par le Controller

    Si je fais ça dans mon Controller :

    $response = $bookServices->search($request);

    $bookGlobal = BookResource::collection($response->get());
    $bookPaginate = BookResource::collection($response->paginate($request->perPage));

    return response()->json(['books' => $bookPaginate, 'filters' => $bookGlobal], 201);

    Ca me retourne certes mes livres paginés (books) et les livres sans pagination (filters) qui me permettrons en front de "construire" la colonne de gauche, mais c'est un peu pourave... je perds les infos de pagination pour "books", et le temps de chargement n'est pas top.

    En faisant ça :

    $response = $bookServices->search($request, false);

    return BookResource::collection($response->paginate($request->perPage));

    La réponse contient bien les infos de pagination, mais je n'ai rien de complet que pour construire la colonne de gauche.

    Une idée ?

    Version de Laravel : 5.8

Vous ne pouvez pas répondre à ce sujet.