Skillshub laravel-eloquent
Advanced Eloquent ORM patterns for performance and query reuse. Use when working with Eloquent relationships, scopes, or advanced query optimization in Laravel. (triggers: app/Models/**/*.php, scope, with, eager, chunk, model)
install
source · Clone the upstream repo
git clone https://github.com/ComeOnOliver/skillshub
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/HoangNguyen0403/agent-skills-standard/laravel-eloquent" ~/.claude/skills/comeonoliver-skillshub-laravel-eloquent && rm -rf "$T"
manifest:
skills/HoangNguyen0403/agent-skills-standard/laravel-eloquent/SKILL.mdsource content
Laravel Eloquent
Priority: P0 (CRITICAL)
Structure
app/ └── Models/ ├── {Model}.php └── Scopes/ # Advanced global scopes
Implementation Guidelines
Query Efficiency & Performance
- N+1 Prevention: Always use
orwith()
for relationships. Never access relationship properties in a loop without eager loading (N+1 Prevention).$with - Strict Loading: Call
inEloquent::preventLazyLoading(!app()->isProduction())
to throwAppServiceProvider::boot()
in local/dev.LazyLoadingViolationException - Large Datasets: Use
,chunk()
, orlazy()
for processing many records without memory issues (Memory Efficiency).cursor()
Query Logic & Scopes
- Reusable Scopes: Define
methods in models for reusable query filters.scopeName(Builder $query): Builder - Chaining: Chain scopes (e.g.,
) to keep controllers from duplicating query logic.User::active()->verified()->get()
Models & Security
- Mass Assignment: Always define
array; useprotected $fillable
for$request->validated()
.Model::create() - Casting: Use
for dates, JSON, and custom types to ensure data consistency.protected $casts
Anti-Patterns
- No lazy loading: Eager-load with
orwith()
; never in loops.$with - No business logic in Models: Move to Services or Actions.
- No raw SQL strings: Use Query Builder or Eloquent methods.
- No
: Specify required columns to limit data transfer.select *