Skip to content

A Laravel package to automate adding configurable status columns to models and migrations. This package provides an easy-to-use HasActiveScope trait, a Status enum, middleware for ensuring active users, and a custom Artisan command to streamline your workflow.

License

Notifications You must be signed in to change notification settings

thefeqy/laravel-model-status

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

34 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Laravel Model Status

Latest Version on Packagist Total Downloads PHP Version GitHub Workflow Status License

A Laravel package that simplifies status management for Eloquent models.


πŸ“‘ Table of Contents


✨ Features

  • βœ… HasActiveScope Trait: Automatically filters models with active status.
  • βœ… Admin Bypass: Admin users can see all models, including inactive ones.
  • βœ… Helper Methods: $model->status->isActive() and $model->status->isInactive().
  • βœ… Dynamic Configuration: Define custom statuses & column names via .env.
  • βœ… Installation Command: php artisan model-status:install for easy setup.
  • βœ… PHP 8.3 Support.

πŸ“¦ Installation

You can install the package via Composer:

composer require thefeqy/laravel-model-status

πŸ”§ Step 1: Run the Installation Command

php artisan model-status:install

This will:

  • Publish the config file (config/model-status.php).
  • Set up required environment variables in .env and .env.example.
  • Ensure your project is ready to use the package.

βš™οΈ Configuration

You can customize the package settings in:

πŸ“‚ config/model-status.php

return [
    'column_name' => env('MODEL_STATUS_COLUMN', 'status'),
    'default_value' => env('MODEL_STATUS_ACTIVE', 'active'),
    'inactive_value' => env('MODEL_STATUS_INACTIVE', 'inactive'),

    'admin_detector' => function () {
        return auth()->check() && auth()->user()->is_admin;
    },
];

🌍 Using .env Variables

Instead of modifying config/model-status.php, you can override values in .env:

πŸ“‚ .env

MODEL_STATUS_COLUMN=state
MODEL_STATUS_ACTIVE=enabled
MODEL_STATUS_INACTIVE=disabled

Now, the package will automatically adapt to your setup.

πŸš€ Usage

Using the HasActiveScope Trait

To enable status management in a model:

use Thefeqy\ModelStatus\Traits\HasActiveScope;

class Product extends Model
{
    use HasActiveScope;

    protected $fillable = ['name'];
}

Now, inactive models are automatically excluded from queries.


Querying Models

βœ… Get Active Models (Default Behavior)

$activeProducts = Product::all(); // Returns only active products

βœ… Get All Models (Including Inactive)

$allProducts = Product::withoutActive()->get();

βœ… Manually Activating / Deactivating a Model

$product = Product::find(1);

$product->activate(); // Set status to "active"
$product->deactivate(); // Set status to "inactive"

βœ… Checking a Model's Status

if ($product->status->isActive()) {
    echo "Product is active!";
}

if ($product->status->isInactive()) {
    echo "Product is inactive!";
}

Using the Middleware

The package includes the EnsureAuthenticatedUserIsActive middleware, which enforces that only users with an active status can access certain routes.

Add Middleware to Routes

Instead of registering a string alias for the middleware, you can reference it by class name in your route definition:

use Illuminate\Support\Facades\Route;
use Thefeqy\ModelStatus\Middleware\EnsureAuthenticatedUserIsActive;

Route::middleware(['auth', EnsureAuthenticatedUserIsActive::class])->group(function () {
    Route::get('/dashboard', function () {
        return 'Welcome to your dashboard!';
    });
});

πŸ‘‘ Admin Bypass for Active Scope

By default, admin users can see inactive models.

This behavior is controlled in config/model-status.php:

'admin_detector' => function () {
    return auth()->check() && auth()->user()->is_admin;
},

πŸ›  Advanced Configuration

If you need a different column name or status values, update πŸ“‚ .env:

MODEL_STATUS_COLUMN=state
MODEL_STATUS_ACTIVE=enabled
MODEL_STATUS_INACTIVE=disabled

Now, models will use:

$table->string('state', 10)->default('enabled');

instead of:

$table->string('status', 10)->default('active');

πŸ§ͺ Testing

Run tests using Pest PHP:

composer test
or
vendor/bin/phpunit

πŸ”’ Security

If you discover a security vulnerability, please report it via email: πŸ“© thefeqy@gmail.com

🀝 Contributing

Want to improve this package? Check out CONTRIBUTING for contribution guidelines.

πŸ“„ License

This package is open-source software licensed under the MIT License.

About

A Laravel package to automate adding configurable status columns to models and migrations. This package provides an easy-to-use HasActiveScope trait, a Status enum, middleware for ensuring active users, and a custom Artisan command to streamline your workflow.

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Languages