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 ().
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.
Prolongeant un peu la réponse parfaite d'Alexey:
Dispatch::all()
=> Renvoie unCollection
Dispatch::all()->where()
=> Renvoie unCollection
Dispatch::where()
=> Renvoie unQuery
Dispatch::where()->get()
=> Renvoie unCollection
Dispatch::where()->get()->where()
=> Renvoie unCollection
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.
pour utiliser tous les enregistrements et paginations, vous devez utiliser le code ci-dessous:
$user_dispatches = Disspath::paginate(8);
Dispatch::where('user_id', auth()->user()->id)->paginate(10);
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