Updated June 2026. Tested on Laravel 13 and PHP 8.4.

Once you have a model and its table, reading data is easy. Think of every Eloquent model as a query builder pointed at its own table. You can pull everything, or add conditions and pull just what you need.

Get every row

The all method returns every record in the table as a collection.

use App\Models\Product;

$products = Product::all();

foreach ($products as $product) {
    echo $product->name;
}

A collection is more than an array. It comes with handy methods like map, filter, pluck and sortBy, so you can shape the results without a loop.

$names = Product::all()->pluck('name');

Add conditions

Reaching for all on a large table is wasteful. Most of the time you want a filtered set. Start a query on the model, chain the conditions you need, then finish with get.

use App\Models\Product;

$products = Product::where('is_active', true)
    ->orderBy('name')
    ->limit(10)
    ->get();

where adds the filter, orderBy sorts, and limit caps the number of rows. The query does not run until you call get, so you can keep building it up across several lines or conditions before it touches the database.

You can stack as many conditions as you like.

$products = Product::where('is_active', true)
    ->where('price', '<', 100)
    ->whereNotNull('released_at')
    ->latest()
    ->get();

latest() is a small convenience for orderBy('created_at', 'desc').

A note on get versus all

Use all only when you genuinely want every row and no conditions. The moment you add a where, switch to get. They both return a collection, the difference is that get runs the query you have been building, while all ignores any conditions.

That covers reading a set of records. To pull a single record by its key, see the article on retrieving a single model. Questions are welcome in the comments.