Polyscope - The agent-first dev environment for Laravel

Eloquent Eager Limit

staudenmeir/eloquent-eager-limit image

Eloquent Eager Limit stats

Downloads
1.8M
Stars
812
Open Issues
0
Forks
55

View on GitHub →

Laravel Eloquent eager loading with limit

Eloquent Eager Limit

[!NOTE] The package's code has been merged into Laravel 11+ and eager loading limits will be supported natively.

This Laravel Eloquent extension allows limiting the number of eager loading results per parent using window functions.

Supports Laravel 5.5–10.

Compatibility

  • MySQL 5.7+
  • MySQL 5.5~5.6: Due to a bug in MySQL, the package only works with strict mode disabled.
    In your config/database.php file, set 'strict' => false, for the MySQL connection.
  • MariaDB 10.2+
  • PostgreSQL 9.3+
  • SQLite 3.25+: The limit is ignored on older versions of SQLite. This way, your application tests still work.
  • SQL Server 2008+

Installation

composer require staudenmeir/eloquent-eager-limit:"^1.0"

Use this command if you are in PowerShell on Windows (e.g. in VS Code):

composer require staudenmeir/eloquent-eager-limit:"^^^^1.0"

Versions

Laravel Package
10.x 1.8
9.x 1.7
8.x 1.6
7.x 1.5
6.x 1.4
5.8 1.3
5.5–5.7 1.2

Usage

Use the HasEagerLimit trait in both the parent and the related model and apply limit()/take() to your relationship:

class User extends Model
{
use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
 
public function posts()
{
return $this->hasMany('App\Post');
}
}
 
class Post extends Model
{
use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
}
 
$users = User::with(['posts' => function ($query) {
$query->latest()->limit(10);
}])->get();

Improve the performance of HasOne/HasOneThrough/MorphOne relationships by applying limit(1):

class User extends Model
{
use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
 
public function latestPost()
{
return $this->hasOne('App\Post')->latest()->limit(1);
}
}
 
class Post extends Model
{
use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
}
 
$users = User::with('latestPost')->get();

You can also apply offset()/skip() to your relationship:

class User extends Model
{
use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
 
public function posts()
{
return $this->hasMany('App\Post');
}
}
 
class Post extends Model
{
use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
}
 
$users = User::with(['posts' => function ($query) {
$query->latest()->offset(5)->limit(10);
}])->get();

Package Conflicts

Contributing

Please see CONTRIBUTING and CODE OF CONDUCT for details.

staudenmeir photo

Lead Backend Developer: PHP, MySQL, Laravel | @laravel Core Contributor

Cube

Laravel Newsletter

Join 40k+ other developers and never miss out on new tips, tutorials, and more.


Staudenmeir Eloquent Eager Limit Related Articles

Eager Load Limit is Coming to Laravel 11 image

Eager Load Limit is Coming to Laravel 11

Read article
Statamic logo

Statamic

The drop-in ready Laravel CMS you’re been waiting for. Go full-stack or headless, flat file or database – it’s up to you.

Statamic
Shift logo

Shift

Running an old Laravel version? Instant, automated Laravel upgrades and code modernization to keep your applications fresh.

Shift
PhpStorm logo

PhpStorm

The go-to PHP IDE with extensive out-of-the-box support for Laravel and its ecosystem.

PhpStorm
Celebian logo

Celebian

Celebian is a social media marketing agency specializing in helping their clients go viral on TikTok. Whether you're looking to reach a bigger audience or gain more Tiktok followers, likes, and views, they've got you covered.

Celebian
Get expert guidance in a few days with a Laravel code review logo

Get expert guidance in a few days with a Laravel code review

Expert code review! Get clear, practical feedback from two Laravel devs with 10+ years of experience helping teams build better apps.

Get expert guidance in a few days with a Laravel code review
Kirschbaum logo

Kirschbaum

Providing innovation and stability to ensure your web application succeeds.

Kirschbaum