laravel-autoscopes maintained by dmdboi
Laravel Auto Scopes
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.