web-dev-qa-db-fra.com

Laravel La méthode de pagination n'existe pas

J'essaie de paginer le résultat du modèle, mais j'obtiens "La méthode de pagination n'existe pas.". Voici mon code:

$user_dispatches = Dispatch::all()->where('user_id', Auth::id())->paginate(10);

J'ai besoin d'obtenir tous les enregistrements où l'ID utilisateur est égal à l'ID utilisateur authentifié actuel. Fonctionne bien sans la méthode paginate ().

10
Andrii H.

Vous devez supprimer all():

Dispatch::where('user_id', Auth::id())->paginate(10);

Lorsque vous utilisez all() vous obtenez toutes les lignes de la table et obtenez une collection. Ensuite, vous utilisez la méthode de collection where() (et non la méthode Query Builder where()), puis vous essayez d'utiliser la méthode paginate() sur la collection et cela ne fonctionne pas. n'existe pas.

18
Alexey Mezenin

Prolongeant un peu la réponse parfaite d'Alexey:

Dispatch::all() => Renvoie un Collection

Dispatch::all()->where() => Renvoie un Collection

Dispatch::where() => Renvoie un Query

Dispatch::where()->get() => Renvoie un Collection

Dispatch::where()->get()->where() => Renvoie un Collection

Vous pouvez uniquement appeler "paginate" sur un Query, pas sur un Collection.

Et oui, il est totalement déroutant d'avoir une fonction where pour les deux Queries et Collections, travaillant aussi près qu'eux, mais c'est ce que c'est.

21
Amarnasan

pour utiliser tous les enregistrements et paginations, vous devez utiliser le code ci-dessous:

$user_dispatches = Disspath::paginate(8);
5
Mostafa Norzade
Dispatch::where('user_id', auth()->user()->id)->paginate(10);
2
parastoo amini

Vous devez supprimer la méthode all():

$user_dispatches = Dispatch::where('user_id', Auth::id())->paginate(10);

Parce que all() renvoie un Collection tandis que paginate() utilise un Builder

1
Joan Nguyen