dmdboi/laravel-autoscopes

Automatically generate scope traits for Laravel Models based on foreign key relationships.

Maintainers

Package info

github.com/dmdboi/laravel-autoscopes

pkg:composer/dmdboi/laravel-autoscopes

Statistics

Installs: 31

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

1.0.1 2026-03-05 22:11 UTC

This package is auto-updated.

Last update: 2026-05-05 22:54:13 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

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:

  1. Creates HasUserScopes trait in app/Models/Traits/
  2. Auto-detects Post and Comment have user_id column (via database schema or $fillable)
  3. 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, generic Builder<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.