Skip to main content
Lists answer a page at a time, and not all of them page the same way. Every list method has an …All() twin that walks it for you: a LazyCollection that fetches a page as you iterate and stops after the last.
It takes the list’s own arguments, minus the page or cursor. Every Collection method works on it: filter(), take(10), chunk(100), first().
In Tinker, an …All() list prints its items, fetching every page to show them. On a big list, add ->take(20). More ways to read a result: Working with results.

Only some fields

When you need only a few fields of every document, its id above all, each list method that takes fields also has a …Pick() twin. It walks every page too, 100 documents a page, and each item is a plain array of the document’s id and the fields you named:
The rows aren’t Data classes: each value is as the site sends it. More in Find an id.

How each list pages

Content lists and members (until pages), the media lists (from total and perPage; their page size is limit), form submissions, the request log, the access and conversion viewers.
It can never loop: an answer for another page than the one asked for, or the same cursor twice, throws. An answer that names its page but no page count throws too, rather than stopping quietly.

One page

The list method itself answers one page, with where you are:

Watching every call

Every call runs on Laravel’s HTTP client, so Telescope and Pulse see it, and log_channel (in config/fetchski-attract.php) writes one line per call: site, method, path, status and time.

Next: testing

Three-line tests, and an Action for any method.