LaravelPackages.net
Acme Inc.
Toggle sidebar
dmdboi/laravel-autoscopes

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

48
0
1.0.1
About dmdboi/laravel-autoscopes

dmdboi/laravel-autoscopes is a Laravel package for automatically generate scope traits for laravel models based on foreign key relationships.. It currently has 0 GitHub stars and 48 downloads on Packagist (latest version 1.0.1). Install it with composer require dmdboi/laravel-autoscopes. Discover more Laravel packages by dmdboi or browse all Laravel packages to compare alternatives.

Last updated

Laravel Auto Scopes

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.

Comments