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

je travaille sur le filtre de recherche sur le clic de case à cocher, avec Laravel et appel Ajax. Donc j'obtiens des résultats quand 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 puis-je obtenir les liens pour la pagination?

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

je le fais en ce moment et avec $links que j'envoie en réponse à un appel ajax, j'ai paramétré la pagination avec $links data. Maintenant, je dois ajouter la requête à la page suivante comme page=2?requête= "quelque chose". Je ne sais pas comment je devrais ajouter les liens restants de résultat de requête aux liens de la page suivante. c'est à dire que je ne t sais ce qui doit venir dans le query="quelque chose". Quelqu'un peut-il me guider. merci

15
demandé sur gthuo 2014-07-22 19:18:02

6 réponses

consultez la réponse de @Arda, car c'est une solution globale. Vous trouverez ci-dessous comment le faire manuellement.

Utiliser appends Paginator:

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

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

$temp->appends($querystringArray);
15
répondu Jarek Tkaczyk 2015-08-20 09:57:04
{{ $users->appends($_GET)->links() }}

il ajoutera tous les paramètres de la chaîne de requête dans le lien de pagination

53
répondu Daud khan 2017-02-01 09:50:43

ajoutez ceci n'importe où dans votre application (E. g routes.php, filtres.php ou tout ce qui est autoloaded), pas besoin d'éditer les codes de pagination qui sont déjà écrits. Cela fonctionne parfaitement en utilisant les compositeurs de vue, et vous n'avez pas besoin de connaître les paramètres de la 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
répondu Arda 2014-10-01 07:27:42

pour la dernière version de Laravel at the moment (5.2), vous pouvez simplement utiliser la façade Request pour récupérer la chaîne de requête et passer cela à la méthode appends () de votre paginator

$input = Request::input();
$myModelsPaginator = App\Models\MyModel::paginate();
$myModelsPaginator->appends($input);
9
répondu georaldc 2016-07-15 18:26:08

ajouter toutes les entrées sauf la page actuelle, le jeton de forme et ce que vous ne voulez pas passer:

$paginatedCollection->appends(request()->except(['page','_token']));
4
répondu Luca C. 2017-12-28 10:59:15

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

Dans votre AppServiceProvider@boot() méthode:

$this->app->resolving(LengthAwarePaginator::class, function ($paginator) {
    return $paginator->appends(array_except(Input::query(), $paginator->getPageName()));
});
0
répondu Rasmus Christoffer Nielsen 2018-10-05 11:14:21