staudenmeir/eloquent-eager-limit
Add per-parent limits to eager-loaded Eloquent relationships in Laravel. Load only the latest N related models for each parent (e.g., newest comments per post) without N+1 queries. Supports common relations and integrates cleanly with queries and pagination.
with() eager loads (e.g., Post::with(['comments' => function($query) { $query->limit(5); }]) → Post::withLimit(['comments' => 5])).Post::withLimit(['comments.user' => 3])), critical for complex data hierarchies (e.g., forums, hierarchical comments).DISTINCT ON if using advanced ordering.TOP vs. LIMIT/OFFSET syntax in nested subqueries.with() + remember()).limit() with Laravel’s paginator (e.g., Post::paginate(10)->withLimit(['comments' => 2])) may yield unexpected results.withLimit could increase query complexity (e.g., deeply nested subqueries).DISTINCT ON) that could conflict?Post::withLimit(['comments.user.posts' => 1]))User->posts->author->posts) that could cause infinite recursion?withLimit fails) for critical paths?Phase 1: Proof of Concept (PoC)
/dashboard, /feed).with() + manual limit() with withLimit().DB::enableQueryLog() to inspect generated SQL.Phase 2: Incremental Rollout
/posts/{id}/comments).withLimit behavior.Phase 3: Full Adoption
with(['relation' => fn($q) => $q->limit(N)]) calls.withLimit(['relation' => N]) in the codebase.withLimit for feeds, not for critical data").withLimit.Post::withLimit(['comments' => 5])).Post::withLimit(['comments.user' => 3])).DB::enableQueryLog().tinker: Test withLimit in isolation.withLimit for critical data without fallback."DISTINCT ON for complex ordering."How can I help you explore Laravel packages today?