2017-10-13 9 views
0

Je teste Laravel avec Algolia. Algolia limite le nombre maximum de résultats de recherche à 1000. Ce qui me convient, je suppose.Laravel Algolia pagination plus de 1000 résultats

Mon problème est que je ne suis pas tout à fait capable de demander 1000 enregistrements de recherche à Algolia, puis de paginer. J'ai essayé:

$result = Model::search(request()->keywords)->take(1000)->paginate(50); 

Mais j'ai toujours Laravel fournir plus de pages que les 20 que je devrais avoir. Il pagine pour tous les enregistrements disponibles, s'il y en a plus de 1000.

Des suggestions?

+0

La meilleure façon d'utiliser Algolia est de l'interroger lorsque vous avez besoin de la page suivante. Pourriez-vous préciser pourquoi vous devez obtenir tous les résultats en même temps? Vous allez tirer beaucoup de données de votre base de données. –

+0

@Julien Bourdeau, j'ai besoin de résultats une page à la fois. Mais quelle est la bonne façon de le faire? Pouvez-vous, s'il vous plaît, me diriger vers un article ou une page? – SuperOcean

+0

Veuillez fournir plus de détails sur le résultat final afin que je puisse comprendre ce que vous essayez de faire. Si vous ne voulez qu'un seul résultat, vous pouvez utiliser la méthode '-> next()', même si je ne comprends toujours pas ce que vous faites vraiment. –

Répondre

-1

J'ai été en mesure de résoudre le problème en faisant un petit changement à this post par @Amigo. Mon code:

utilisez Illuminate \ Pagination \ LengthAwarePaginator;

protected $perPage = 50; 

public function search() 
{ 

    $results = Model::search(request()->keywords)->take(1000)->get(); 

    $results = new LengthAwarePaginator(
     $results->slice((LengthAwarePaginator::resolveCurrentPage() * 
     $this->perPage)-$this->perPage, 
     $this->perPage)->all(), count($results), 
     $this->perPage, null, ['path' => '']); 

    return view('/searchResult', compact('results')); 

} 

Utilisation de la norme paginator Laravel fonctionne très bien maintenant.