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