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
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);
{{ $users->appends($_GET)->links() }}
il ajoutera tous les paramètres de la chaîne de requête dans le lien de pagination
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);
});
//////////////////
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);
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']));
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()));
});