dmdboi / laravel-autoscopes
Automatically generate scope traits for Laravel Models based on foreign key relationships.
1.0.1
2026-03-05 22:11 UTC
Requires
- php: ^8.2
- illuminate/contracts: ^11.0||^12.0
- nikic/php-parser: ^5.7
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- larastan/larastan: ^3.0
- laravel/pint: ^1.14
- nunomaduro/collision: ^8.8
- orchestra/testbench: ^10.0.0||^9.0.0
- pestphp/pest: ^4.0
- pestphp/pest-plugin-arch: ^4.0
- pestphp/pest-plugin-laravel: ^4.0
- phpstan/extension-installer: ^1.4
- phpstan/phpstan-deprecation-rules: ^2.0
- phpstan/phpstan-phpunit: ^2.0
This package is auto-updated.
Last update: 2026-05-05 22:54:13 UTC
README
Automatically generate type-safe scope traits for Laravel models based on foreign key relationships.
Installation
composer require dmdboi/laravel-autoscopes --dev
Quick Start
Generate scope traits for your models:
# Creates HasUserScopes trait and applies to models with user_id column php artisan scopes:generate User # Use the generated scopes Post::forUser(1)->get(); Post::forUserIn([1, 2, 3])->get(); Post::exceptUser(1)->get(); Comment::forUser(1)->forPost(5)->get();
How It Works
Given models with foreign keys:
class Post extends Model { protected $fillable = ['user_id', 'title', 'content']; } class Comment extends Model { protected $fillable = ['user_id', 'post_id', 'content']; }
Running php artisan scopes:generate User:
- Creates
HasUserScopestrait inapp/Models/Traits/ - Auto-detects Post and Comment have
user_idcolumn (via database schema or $fillable) - Applies trait to both models automatically
Generated trait includes:
<?php declare(strict_types=1); namespace App\Models\Traits; use Illuminate\Database\Eloquent\Builder; trait HasUserScopes { /** * @param Builder<\Illuminate\Database\Eloquent\Model> $query * @param int|string $userId * @return Builder<\Illuminate\Database\Eloquent\Model> */ public function scopeForUser(Builder $query, int|string $userId): Builder { return $query->where('user_id', $userId); } // scopeForUserIn() and scopeExceptUser() also included }
Commands
scopes:generate {model} - Generate a scope trait and auto-apply to related models
php artisan scopes:generate User php artisan scopes:generate Post
scopes:add {trait} - Apply existing trait to models (validates model exists)
php artisan scopes:add HasUserScopes php artisan scopes:add HasPostScopes
Features
- Type Safe -
strict_types=1, genericBuilder<Model>type hints - Auto-Detection - Finds models with matching foreign keys
- Format Preserving - PHP-Parser preserves your code formatting
- Atomic - File locking prevents concurrent modification issues
- Secure - Path traversal protection built-in
Testing
# Run all tests composer test # Static analysis composer analyse # Code style composer format
Changelog
See CHANGELOG for recent changes.
Credits
License
The MIT License (MIT). See License File for details.