laravel:eloquent-relationships

SkillDev tools

Define clear relationships and load data efficiently; prevent N+1, use constraints, counts/sums, and pivot syncing safely

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the laravel:eloquent-relationships skill

What this skill tells your AI

The instructions your AI receives, as published by jpcaparas/superpowers-laravel in skills/eloquent-relationships-and-loading/SKILL.md and read by ahel’s review.

Model relationships express your domain; load only what you need.

Commands

# Typical loading
Post::with(['author', 'tags'])->withCount('comments')->paginate(20);

# Constrained eager loading
User::with(['posts' => fn($q) => $q->latest()->where('published', true)])->find($id);

# Pivot ops (many-to-many)
$post->tags()->sync([1,2,3]);       // atomic replace
$post->tags()->syncWithoutDetaching([4]);

# Chunking large reads
Order::where('status', 'open')->lazy()->each(fn($o) => ...);

Patterns

  • See laravel:performance-eager-loading for N+1 detection and measurement
  • Use whereHas() / has() to filter by related existence
  • Prefer withCount, withSum, withMax for simple aggregates
  • Apply global / local scopes for recurring constraints
  • Keep relationship names consistent and pluralized where appropriate
  • Laravel 13+: serialized Eloquent collections (e.g., in queued jobs) now restore eager-loaded relations after deserialization, matching single-model behavior — don't rely on relations being absent
  • Laravel 13+: model-level attributes like #[DateFormat('Y-m-d')] and #[WithoutTimestamps] are available (see laravel:php-attributes)

Signals

GitHub stars
153
Forks
2
Last commit
Jul 2026
Advanced
Catalog kind
skill
Gateway key
laravel-eloquent-relationships
Source
github.com/jpcaparas/superpowers-laravel