mohamedhekal/ordermachine

Configurable order lifecycle state machine for Laravel with guards, history, and events

Maintainers

Package info

github.com/mohamedhekal/ordermachine

pkg:composer/mohamedhekal/ordermachine

Transparency log

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v0.1.0 2026-07-16 14:23 UTC

This package is auto-updated.

Last update: 2026-07-16 14:35:21 UTC


README

CI License: MIT PHP Laravel

Search terms: laravel, orders, state-machine, fsm, oms, erp, lifecycle, php, laravel-package, order-status, ecommerce, transitions.

Configurable order lifecycle state machine for Laravel OMS/ERP apps: explicit states, guarded transitions, history, and domain events.

Installation

composer require mohamedhekal/ordermachine
php artisan vendor:publish --tag=ordermachine-config
php artisan migrate

Setup

use Hekal\OrderMachine\Concerns\HasOrderLifecycle;
use Illuminate\Database\Eloquent\Model;

class Order extends Model
{
    use HasOrderLifecycle;

    protected $guarded = [];
}

Ensure your orders table has a status column (configurable).

Usage

$order->transition('confirm');
$order->transition('pack');
$order->transition('ship');
$order->transition('deliver');

$order->canTransition('cancel');
$order->allowedTransitions();
$order->stateHistory;

Or via facade:

use Hekal\OrderMachine\Facades\OrderMachine;

OrderMachine::apply($order, 'confirm');

Default graph

pending → confirmed → packed → shipped → delivered
cancel from pending|confirmed|packed

Customize in config/ordermachine.php. Add guards as invokable classes implementing TransitionGuard.

Events

OrderStateTransitioned fires after a successful transition (inside the same DB transaction after history write).

Testing

composer install && composer test

License

MIT