Listing states | laravel-model-states | Spatie

 SPATIE

  Laravel Model States
=======================

spatie.be/open-source

  [Docs](https://spatie.be/docs)  [Laravel-model-states](https://spatie.be/docs/laravel-model-states/v1)  Working-with-states  Listing states

 Version   v2   v1

 Other versions for crawler [v2](https://spatie.be/docs/laravel-model-states/v2) [v1](https://spatie.be/docs/laravel-model-states/v1)

  Listing states
- [ Introduction ](https://spatie.be/docs/laravel-model-states/v1/01-introduction)
- [ Postcardware ](https://spatie.be/docs/laravel-model-states/v1/02-postcardware)
- [ Requirements ](https://spatie.be/docs/laravel-model-states/v1/03-requirements)
- [ Installation &amp; setup ](https://spatie.be/docs/laravel-model-states/v1/04-installation-setup)
- [ Questions and issues ](https://spatie.be/docs/laravel-model-states/v1/05-questions-issues)
- [ Changelog ](https://spatie.be/docs/laravel-model-states/v1/06-changelog)
- [ About us ](https://spatie.be/docs/laravel-model-states/v1/07-about-us)

Working with states
-------------------

- [ Configuring states ](https://spatie.be/docs/laravel-model-states/v1/working-with-states/01-configuring-states)
- [ Serializing states ](https://spatie.be/docs/laravel-model-states/v1/working-with-states/02-serializing-states)
- [ Listing states ](https://spatie.be/docs/laravel-model-states/v1/working-with-states/03-listing-states)

Working with transitions
------------------------

- [ Configuring transitions ](https://spatie.be/docs/laravel-model-states/v1/working-with-transitions/01-configuring-transitions)
- [ Custom transition classes ](https://spatie.be/docs/laravel-model-states/v1/working-with-transitions/02-custom-transition-classes)
- [ Dependency injection in transition classes ](https://spatie.be/docs/laravel-model-states/v1/working-with-transitions/03-dependency-injection-in-transition-classes)
- [ Retrieving transitionable states ](https://spatie.be/docs/laravel-model-states/v1/working-with-transitions/04-retrieving-transitionable-states)

Querybuilder support
--------------------

- [ State scopes ](https://spatie.be/docs/laravel-model-states/v1/querybuilder-support/01-state-scopes)

Request validation
------------------

- [ State validation rule ](https://spatie.be/docs/laravel-model-states/v1/request-validation/01-state-validation-rule)

      You are viewing the documentation for **an older version** of this package. You can check the version you are using with the following command:

 `                                    composer show spatie/laravel-model-states                                                                                                                                                                                                                                    `

Listing states
==============

###  On this page

1. [ Get Registered States ](#content-get-registered-states)
2. [ Get Default States ](#content-get-default-states)

Say you have setup the invoice model as follows:

```
namespace App;

use App\States\Invoice\Paid;
use App\States\Invoice\Pending;
use App\States\Invoice\Declined;
use App\States\HasStates;
use App\States\Fulfillment\Partial;
use App\States\Fulfillment\Complete;
use App\States\Invoice\InvoiceState;
use App\States\Fulfillment\Unfulfilled;
use Illuminate\Database\Eloquent\Model;
use App\States\Fulfillment\FulfillmentState;

class Invoice extends Model
{
    use HasStates;

    protected function registerStates(): void
    {
        $this
            ->addState('state', InvoiceState::class)
            ->allowTransition(Pending::class, Paid::class)
            ->allowTransition(Pending::class, Declined::class)
            ->default(Pending::class);

        $this
            ->addState('fulfillment', FulfillmentState::class)
            ->allowTransition(Unfulfilled::class, Complete::class)
            ->allowTransition(Unfulfilled::class, Partial::class)
            ->allowTransition(Partial::class, Complete::class);
    }
}

```

Get Registered States
-----------------------------------------------------------------------------------------------------------------------

You can get all the registered states with `Invoice::getStates()`, which returns a collection of state classes, grouped by column:

```
[
    "state" => [
        'App\States\Invoice\Declined',
        'App\States\Invoice\Paid',
        'App\States\Invoice\Pending',
    ],
    "fulfillment" => [
        'App\States\Fulfillment\Complete',
        'App\States\Fulfillment\Partial',
        'App\States\Fulfillment\Unfulfilled',
    ]
]
```

You can also get the registered states for a specific column with `Invoice::getStatesFor('state')`, which returns a collection of state classes:

```
[
    'App\States\Invoice\Declined',
    'App\States\Invoice\Paid',
    'App\States\Invoice\Pending',
],
```

Get Default States
--------------------------------------------------------------------------------------------------------------

You can get all the default states with `Invoice::getDefaultStates()`, which returns a collection of state classes, keyed by column:

```
[
    "state" => 'App\States\Invoice\Pending',
    "fulfillment" => null,
]
```

You can also get the default state for a specific column with `Invoice::getDefaultStateFor('state')`, which returns:

```
'App\States\Invoice\Pending'
```

 A good
match?
-------------

### What we do best

- All things Laravel
- Custom frontend components
- Building APIs
- AI-powered features
- Simplifying things
- Clean solutions
- Integrating services

### Not our cup of tea

- WordPress themes
- Cutting corners
- Free mockups to win a job
- "Just execute the briefing"

 In short: we'd like to be a **substantial part** of your project.

 [ Get in touch via email ](mailto:info@spatie.be?subject=A%20good%20match%21&body=Tell%20us%20as%20much%20as%20you%20can%20about%0A-%20your%20online%20project%0A-%20your%20planning%0A-%20your%20budget%0A-%20%E2%80%A6%0A%0AAnything%20that%20helps%20us%20to%20start%20straightforward%21)
