web-dev-qa-db-fra.com

Comment ajouter automatiquement une chaîne de requête aux liens de pagination Laravel?

Je travaille sur le filtre de recherche sur la case à cocher, avec Laravel et l'appel Ajax. Donc, je reçois des résultats lorsque je clique sur une case à cocher. ma requête est la suivante:

    $editors = User::with(['editor.credentials','editor.specialties','editor.ratings']);
        $temp=$editors->whereHas('editor', function($q) use ($a_data){
            $q->whereHas('specialties',function($sq) use($a_data){
            $sq->whereIn('specialty',$a_data);
            });
        })->paginate(2);

Cela me donne toutes les données dont j'ai besoin. Cependant, comment devrais-je obtenir les liens pour la pagination? 

    $temp->setBaseUrl('editors');
    $links = $temp->links()->render();

Je le fais actuellement et avec $ links que je vous envoie comme réponse à un appel ajax, je règle la pagination avec les données de $ links. Maintenant, je dois ajouter la requête à la page suivante comme page = 2? Query = "quelque chose". Je ne sais pas comment ajouter des liens de résultat de requête restants aux liens de page suivants. c’est-à-dire que je ne sais pas ce qui devrait figurer dans la partie requête = "quelque chose". Quelqu'un peut-il me guider? Merci

15
user2067888

Vérifiez la réponse de @Arda, car c'est une solution globale. Vous trouverez ci-dessous comment procéder manuellement.

Utilisez appends sur Paginator:

$querystringArray = Input::only(['search','filter','order']); // sensible examples

// or:
$querystringArray = ['queryVar' => 'something', 'anotherVar' => 'something_else'];

$temp->appends($querystringArray);
15
Jarek Tkaczyk
{{ $users->appends($_GET)->links() }}

Il ajoutera tous les paramètres de chaîne de requête au lien de pagination.

63
Daud khan

Ajoutez ceci n'importe où dans votre application (par exemple, routes.php, filters.php ou tout ce qui est auto-chargé), inutile de modifier les codes de pagination déjà écrits. Cela fonctionne parfaitement avec les compositeurs de vues, et vous n'avez pas besoin de connaître les paramètres de chaîne de requête:

////////PAGINATION QUERY STRING APPEND
View::composer(Paginator::getViewName(), function($view) {
    $queryString = array_except(Input::query(), Paginator::getPageName());
    $view->paginator->appends($queryString);
});
//////////////////
14
Arda

Pour la dernière version de Laravel pour le moment (5.2), vous pouvez simplement utiliser la façade de requête pour récupérer la chaîne de requête et la transmettre à la méthode appends () de votre pagination.

$input = Request::input();
$myModelsPaginator = App\Models\MyModel::paginate();
$myModelsPaginator->appends($input);
9
georaldc

Ajoutez toutes les entrées sauf la page réelle, le jeton de formulaire et ce que vous ne voulez pas transmettre:

$paginatedCollection->appends(request()->except(['page','_token']));
7
Luca C.

Inspiré des réponses précédentes, j'ai fini par utiliser le conteneur de service pour le support frontend + api.

Dans votre méthode AppServiceProvider@boot():

$this->app->resolving(LengthAwarePaginator::class, function ($paginator) {
    return $paginator->appends(array_except(Input::query(), $paginator->getPageName()));
});

dans votre vue où vous affichez la pagination ...

{{$ résultats-> ajoute (Request :: except ('page')) -> links ()}}

ajoute conserve la valeur de la chaîne de requête, sauf "page". ne sais pas si cela fonctionnera avec la demande POST

0
sampath pallekumbura