2014-07-22 15 views
12

Sto lavorando al filtro di ricerca sul checkbox, con le chiamate Laravel e Ajax. Quindi ottengo risultati quando clicco su una casella di controllo. la mia domanda è la seguente:Come aggiungere automaticamente la stringa di query ai collegamenti di impaginazione laravel?

$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); 

Questo mi dà tutti i dati che mi servono. tuttavia come dovrei ottenere i collegamenti per l'impaginazione?

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

Attualmente sto facendo questo e con $ collegamenti che io mando su come risposta alla chiamata ajax, ho impostato l'impaginazione con i dati $ link. Ora, ho bisogno di aggiungere la query alla pagina successiva come page = 2? Query = "something". Non so come dovrei andare sull'aggiunta dei restanti link dei risultati della query ai collegamenti della pagina successiva. cioè io non so cosa dovrebbe venire nella query = "qualcosa" parte. Qualcuno può guidarmi. grazie

risposta

14

Controlla la risposta da @Arda, come soluzione globale. Qui sotto puoi trovare come farlo manualmente.

Usa appends su Paginator:

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

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

$temp->appends($querystringArray); 
+0

Grande che funzionava. ero confuso su come usare 'appends()'. grazie ancora – user2067888

14

Aggiungi questo ovunque nella vostra applicazione (per esempio routes.php, filters.php o tutto ciò che è caricata automaticamente), non c'è bisogno di modificare i codici di impaginazione che è scritto già. Questo funziona perfettamente con vista compositori, e non avete bisogno di sapere tutti i parametri di stringa di query:

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

Questo dovrebbe essere accettato –

+0

FatalErrorException in routes.php riga 20: Class 'Paginator' non trovato – Tarzan

+1

Questa risposta è per Laravel 4 @Tarzan, in Laravel 5, le classi sono standard PSR-4, quindi è necessario aggiungere \ personaggio prima. Ma non l'ho provato in LAravel 5. – Arda

8

Per l'ultima versione del laravel al momento (5.2), si può semplicemente utilizzare il Richiesta di facciata per recuperare il stringa di query e passa che a accodamento del vostro paginator() metodo

$input = Request::input(); 
$myModelsPaginator = App\Models\MyModel::paginate(); 
$myModelsPaginator->appends($input); 
31
{{ $users->appends($_GET)->links() }} 

Si aggiungerà tutti i parametri di stringa di query in collegamento impaginazione

+0

mi hai salvato bro! ha funzionato perfettamente in laravel 5.4 –

+0

Grazie, ha funzionato anche per Laravel 5.4 –

+0

Grazie, funziona davvero –

0

aggiungere tutti di ingresso eccetto AC tual page, form token e cosa non vuoi passare:

$paginatedCollection->appends(request()->except(['page','_token'])); 
Problemi correlati