PHPackages                             laravel-israel/eloquent-status-mutator - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. laravel-israel/eloquent-status-mutator

ActiveLibrary[Database &amp; ORM](/categories/database)

laravel-israel/eloquent-status-mutator
======================================

A status manager trait for Eloquent models

0.1(8y ago)414MITPHP

Since Oct 5Pushed 8y ago2 watchersCompare

[ Source](https://github.com/laravel-israel/eloquent-status-mutator)[ Packagist](https://packagist.org/packages/laravel-israel/eloquent-status-mutator)[ RSS](/packages/laravel-israel-eloquent-status-mutator/feed)WikiDiscussions master Synced 2d ago

READMEChangelog (1)Dependencies (3)Versions (2)Used By (0)

Eloquent Status Mutator
=======================

[](#eloquent-status-mutator)

[![Build Status](https://camo.githubusercontent.com/d913ce5b127f3bfc2689c21aadc2cd339b579812355e257c20e52ffac922ea3d/68747470733a2f2f7472617669732d63692e6f72672f6c61726176656c2d69737261656c2f656c6f7175656e742d7374617475732d6d757461746f722e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/laravel-israel/eloquent-status-mutator)[![Latest Stable Version](https://camo.githubusercontent.com/22b30b59aa903ba5d6abd4feed38ed38f271c96b9a8cc7ef136566d7f889658f/68747470733a2f2f706f7365722e707567782e6f72672f6c61726176656c2d69737261656c2f656c6f7175656e742d7374617475732d6d757461746f722f762f737461626c65)](https://packagist.org/packages/laravel-israel/eloquent-status-mutator)[![Total Downloads](https://camo.githubusercontent.com/5ed12678babc73716c1909af6f68c9f5e5e1eb8665d7f7e8f481b174bd874f90/68747470733a2f2f706f7365722e707567782e6f72672f6c61726176656c2d69737261656c2f656c6f7175656e742d7374617475732d6d757461746f722f646f776e6c6f616473)](https://packagist.org/packages/laravel-israel/eloquent-status-mutator)[![License](https://camo.githubusercontent.com/1999bd68e3b6ce875dc8137e2c731bb91a58f4e9ec99a9ff130ffaa769231e8a/68747470733a2f2f706f7365722e707567782e6f72672f6c61726176656c2d69737261656c2f656c6f7175656e742d7374617475732d6d757461746f722f6c6963656e7365)](https://packagist.org/packages/laravel-israel/eloquent-status-mutator)

Handling status changes of a model is always a pain.

Eloquent Status Mutator provides is a simple trait which enforces correct status changes &amp; some more cool features.

Usage
-----

[](#usage)

### Define Statuses

[](#define-statuses)

Define the statuses of the model in the `statuses` property:

```
class Order extends Model
{
    use HasStatus;

    protected $statuses = [
        'opened'    => [],
        'paid'      => ['from'     => 'opened'],
        'approved'  => ['from'     => 'paid'],
        'shipped'   => ['from'     => ['paid', 'approved']],
        'arrived'   => ['from'     => 'shipped'],
        'cancelled' => ['not-from' => ['arrived']],
    ];
}
```

### Automatic Status Enforcement

[](#automatic-status-enforcement)

The package makes sure that only listed statuses can be set:

```
$order->status = 'opened'; // OK

$order->status = 'some other status'; // Throws Exception
```

### Status Flow Validation

[](#status-flow-validation)

The package enforces that status can be set only after defined statuses in its `'from'` key

```
$order->status = 'opened';

$order->status = 'paid'; // OK

$order->status = 'arrived'; // Throws Exception
```

The package also enforces the `'not-from'` status

```
$order->status = 'arrived';

$order->status = 'cancelled'; // Throws Exception
```

### Helpers

[](#helpers)

```
$order->status = 'paid';

if ($order->is('paid')) {
    echo 'The order is shipped';
}

if ($order->canBe('shipped')) {
    echo 'The order can be shipped';
}
```

### Before and After callbacks

[](#before-and-after-callbacks)

In some cases, we need to do something after a specific status is set - for example, send a mail after an order is cancelled. Our package invokes a method after status change by the convention of `on` + `status name (camel cased)`

```
class Order extends Model
{
    use HasStatus;

    protected $statuses = [
        'opened'    => [],
        'paid'      => ['from'     => 'opened'],
        'approved'  => ['from'     => 'paid'],
        'shipped'   => ['from'     => ['paid', 'approved']],
        'arrived'   => ['from'     => 'shipped'],
        'cancelled' => ['not-from' => ['arrived']],
    ];

    public function onCancelled()
    {
        // Send cancellation mail to the user
    }
}
```

Installation
------------

[](#installation)

- Request the package via composer

```
composer require laravel-israel/eloquent-status-mutator

```

- Use `HasStatus` trait in your model

```
class Order extends Model
{
    use HasStatus;
}
```

- Define the available statuses in the model

```
protected $statuses = [
    'opened'    => [],
    'paid'      => ['from'     => 'opened'],
    'approved'  => ['from'     => 'paid'],
    'shipped'   => ['from'     => ['paid', 'approved']],
    'arrived'   => ['from'     => 'shipped'],
    'cancelled' => ['not-from' => ['arrived']],
];
```

###  Health Score

25

—

LowBetter than 37% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity10

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity53

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

3143d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/1df40c63dd50b0fb25025c701befa5a51440dad21e2d3b7272aaabbaa36bab4e?d=identicon)[laravel Israel](/maintainers/laravel%20Israel)

---

Top Contributors

[![ido567](https://avatars.githubusercontent.com/u/2265476?v=4)](https://github.com/ido567 "ido567 (18 commits)")

### Embed Badge

![Health badge](/badges/laravel-israel-eloquent-status-mutator/health.svg)

```
[![Health](https://phpackages.com/badges/laravel-israel-eloquent-status-mutator/health.svg)](https://phpackages.com/packages/laravel-israel-eloquent-status-mutator)
```

###  Alternatives

[anourvalar/eloquent-serialize

Laravel Query Builder (Eloquent) serialization

11320.2M21](/packages/anourvalar-eloquent-serialize)[overtrue/laravel-versionable

Make Laravel model versionable.

585308.0k5](/packages/overtrue-laravel-versionable)[abbasudo/laravel-purity

elegant way to add filter and sort in laravel

514330.5k1](/packages/abbasudo-laravel-purity)[statamic-rad-pack/runway

Eloquently manage your database models in Statamic.

135192.6k5](/packages/statamic-rad-pack-runway)[dragon-code/laravel-deploy-operations

Performing any actions during the deployment process

240173.5k2](/packages/dragon-code-laravel-deploy-operations)[stayallive/laravel-eloquent-observable

Register Eloquent model event listeners just-in-time directly from the model.

2928.9k7](/packages/stayallive-laravel-eloquent-observable)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
