Skip to content
cccskills
FreePublished on GitHub

eloquent

Use when writing Eloquent models, relationships, scopes, or queries via Model:: — 'fetch users with their orders'. NOT for PHPStan output, non-Eloquent services, or raw SQL questions.

The English summary is being prepared. Showing the original description.

See how to install

Files included (2)

  • SKILL.md3.4 KB
  • evals/triggers.json1.6 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

eloquent

When to use

Use when creating/modifying Eloquent models, relationships, scopes, or writing database queries.

Do NOT use when:

  • Schema design or query optimization (use database skill)
  • Creating migrations only (use laravel-migration skill)

Procedure: Create or modify a model

Step 0: Inspect

  1. Check existing models — match property declarations, cast patterns, relationship style, scope naming.
  2. Check for repositories — some projects use repository interfaces.
  3. Understand the schema — check migrations for column names, types, constraints.
  4. Check for multi-tenancy — which $connection to use?

Step 1: Read attribute access style

Read eloquent.access_style from .agent-settings.yml. Default: getters_setters.

ValueInside modelOutside model
getters_settersgetAttribute() / setAttribute()Typed getters/setters
get_attributegetAttribute() / setAttribute()Same
magic_properties$this->column$model->column

→ See guideline php/eloquent.md and php-coding rule for full conventions.

Step 2: Build the model

  1. Set $connection, $table, $fillable/$guarded, $casts, $attributes (defaults).
  2. Add typed getters + fluent setters for each attribute (if getters_setters style).
  3. Add relationship getter above each relationship method.
  4. Add scopes for reusable query constraints.
  5. Register Observer via #[ObservedBy] — never use booted().

Step 3: Write queries

  • Always eager load relationships accessed in loops: ->with(['customer']).
  • Always paginate list queries: ->paginate(15).
  • Use exists() over count() > 0.
  • Use chunk() / lazy() for large datasets.
  • Constrain eager loads when only a subset is needed.

Conventions

→ See guideline php/eloquent.md for getter/setter examples, relationship getters, observers, casts. → See guideline php/database.md for indexing, transactions, migrations.

Validate

  • Run PHPStan on model — must pass.
  • Verify no N+1: check that all relationship access in loops uses eager loading.
  • Confirm typed getters exist for every relationship.
  • Run affected tests — must pass.

Output format

  1. Model class with typed getters/setters, relationships, and observer
  2. Migration file if schema changes are needed

Gotcha

  • Never access relationships via magic properties — always use typed getter.
  • N+1 queries are the #1 performance issue — always eager load.
  • getAttribute() returns mixed — cast or type-check the result.
  • $model->save() can silently fail without fillable/guarded config.

Do NOT

  • Do NOT put business logic in models — delegate to services.
  • Do NOT access relationships in loops without eager loading.
  • Do NOT use Model::all() without pagination on list endpoints.
  • Do NOT use booted() for lifecycle hooks — use Observers with #[ObservedBy].

Auto-trigger keywords

  • Eloquent
  • model
  • relationship
  • scope
  • accessor
  • mutator

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Use when reviewing UI for accessibility — WCAG 2.2 AA, keyboard nav, focus, ARIA, contrast, screen-reader semantics — even on 'is this a11y-OK?' or 'mach das barrierefrei'.

The English summary is being prepared. Showing the original description.

event4u-app/agent-config12Updated Oct 20, 2026

Use when defining or auditing the activation event — aha-moment selection, retention correlation, falsifiable definition. Triggers on 'what is our aha moment', 'redefine activation'.

The English summary is being prepared. Showing the original description.

event4u-app/agent-config12Updated Oct 20, 2026

Use when capturing an architectural decision — file naming, next ADR number, Status / Context / Decision / Consequences, index regen; fires even without saying 'ADR'.

The English summary is being prepared. Showing the original description.

event4u-app/agent-config12Updated Oct 20, 2026

Adversarial critique — devil's advocate, stress-test, honest teardown ('poke holes', 'be brutal', 'was hältst du davon'); explicit request only. Routine code or design review → code-review.

The English summary is being prepared. Showing the original description.

event4u-app/agent-config12Updated Oct 20, 2026

Use when reading, creating, or updating agent documentation, module docs, roadmaps, or AGENTS.md. Understands the full .augment/, agents/, and copilot-instructions structure.

The English summary is being prepared. Showing the original description.

event4u-app/agent-config12Updated Oct 20, 2026

Use for an adversarial red-team / blue-team / auditor review of an AI agent's CONFIG + behaviour (rules, skills, MCP, hooks, permissions) — attack-chain → defensive-gap list, not a code audit.

The English summary is being prepared. Showing the original description.

event4u-app/agent-config12Updated Oct 20, 2026

See all skills by event4u-app

Report a problem with this skill