albertoarena / laravel-event-sourcing-generator
Laravel event sourcing domain generator
Installs: 7 006
Dependents: 0
Suggesters: 0
Security: 0
Stars: 14
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/albertoarena/laravel-event-sourcing-generator
Requires
- php: ^8.2|^8.3
- aldemeery/onion: ^1.0
- illuminate/contracts: *
- illuminate/support: *
- nikic/php-parser: ^5.1
- spatie/laravel-event-sourcing: ^7.9
Requires (Dev)
- jaschilz/php-coverage-badger: ^2.0
- larastan/larastan: ^2.9
- laravel/pint: ^1.1
- orchestra/testbench: ^9.0
- php-mock/php-mock-mockery: ^1.4
- phpstan/phpstan: ^1.12
- phpunit/phpunit: ^11.4
- dev-main
- v1.0.12
- v1.0.11
- v1.0.10
- v1.0.9
- v1.0.8
- v1.0.7
- v1.0.6
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- v0.1.27
- v0.1.26
- v0.1.25
- v0.1.24
- v0.1.23
- v0.1.22
- v0.1.21
- v0.1.20
- v0.1.19
- v0.1.18
- v0.1.17
- v0.1.16
- v0.1.15
- v0.1.14
- v0.1.13
- v0.1.12
- v0.1.11
- v0.1.10
- v0.1.9
- v0.1.8
- v0.1.7
- v0.1.6
- v0.1.5
- v0.1.4
- v0.1.3
- v0.1.2
- v0.1.1
- v0.1.0
- dev-dependabot/composer/symfony/http-foundation-7.3.7
- dev-dependabot/composer/league/commonmark-2.7.0
This package is auto-updated.
Last update: 2026-01-26 21:17:36 UTC
README
Laravel event sourcing generator scaffolds complete domain structures for Spatie's Laravel Event Sourcing, providing a single Artisan command to generate events, projections, projectors, aggregates, reactors, actions, DTOs, notifications, and PHPUnit tests.
New to event sourcing? Check out Spatie's documentation to understand projections, aggregates, and reactors.
Table of Contents
- Changelog
- Contributing
- Installation
- Quick Start
- What Gets Generated
- Usage
- Limitations and future enhancements
Changelog
Please see CHANGELOG for more information what has changed recently.
Contributing
Feel free to fork, improve and create a pull request.
Please see CONTRIBUTING for details.
Installation
Compatibility
| What | Version |
|---|---|
| PHP | 8.3 / 8.4 |
| Laravel | 10.x / 11.x |
| Spatie's event sourcing | 7.x |
Install
composer require albertoarena/laravel-event-sourcing-generator
Quick Start
Generate a basic domain structure:
php artisan make:event-sourcing-domain Animal --domain=Animal
This creates a complete event-sourced domain with events, projections, projectors, and actions in app/Domain/Animal/Animal/.
For more advanced features, see the Usage section below.
What Gets Generated
Running the command creates this structure in your app/Domain/{DomainName}/{ModelName}/ directory:
Always Generated:
Actions/- Create/Update/Delete action classesDataTransferObjects/- DTOs for model dataEvents/- Domain events (Created, Updated, Deleted)Projections/- Read model (Eloquent model)Projectors/- Event handlers that update projections
Optional (with flags):
Aggregates/- Aggregate root (--aggregate=1, requires uuid primary key)Reactors/- Side-effect handlers (--reactor=1)Notifications/- Event notifications (--notifications=database,mail,slack,teams)Notifications/Concerns/- Shared notification traits
tests/Domain/{DomainName}/{ModelName}/- PHPUnit tests (--unit-test)
With Failed Events (--failed-events=1):
- Additional events:
{Model}CreationFailed,{Model}UpdateFailed,{Model}DeletionFailed - Corresponding notifications if
--notificationsis also specified
Usage
php artisan make:event-sourcing-domain <model> [options]
Basic Options:
-d|--domain=<domain>- The name of the domain--namespace=<namespace>- The namespace or root folder (default: "Domain")--root=<root>- The name of the root folder (default: "app")
Migration Options:
-m|--migration=<migration>- Existing migration for the model (with or without timestamp prefix, or table name)--migration-exclude=<pattern>- Migration pattern to exclude (supports regex)
Feature Flags:
-a|--aggregate=<0|1>- Generate aggregate (requires uuid primary key)-r|--reactor=<0|1>- Generate reactor-u|--unit-test- Generate PHPUnit tests--failed-events=<0|1>- Generate failed event classes--notifications=<types>- Generate notifications (database,mail,slack,teams, or no)
Model Configuration:
-p|--primary-key=<uuid|id>- Primary key type (default: uuid)--indentation=<spaces>- Indentation spaces for generated code (default: 4)
Show help
php artisan help make:event-sourcing-domain
Basic usage
Documentation about basic usage
Generate a model with same name of the domain
php artisan make:event-sourcing-domain Animal \ --domain=Animal
Generate a model with different domain
Read documentation with examples
php artisan make:event-sourcing-domain Tiger \ --domain=Animal
Generate a model with different domain and namespace
Read documentation with examples
php artisan make:event-sourcing-domain Tiger \ --domain=Animal \ --namespace=CustomDomain
Generate a model from existing migration
Read documentation with examples
php artisan make:event-sourcing-domain Animal \ --migration=create_animal_table \ --unit-test
Generate a model from existing migration using pattern and exclude specific one
Read documentation with examples
php artisan make:event-sourcing-domain Animal \ --migration=animal \ --migration-exclude=drop_last_column_from_animals \ --unit-test
Generate a model from existing migration using pattern and exclude using regex
Read documentation with examples
php artisan make:event-sourcing-domain Animal \
--migration=animal \
--migration-exclude="/drop_.*_from_animals/" \
--unit-test
Generate a model from existing migration with failed events and notifications
php artisan make:event-sourcing-domain Animal \ --migration=create_animal_table \ --failed-events=1 \ --notifications=database,mail,slack
Domain and namespace
Read documentation about directory structure
Specify the name of the domain
Read documentation with examples
php artisan make:event-sourcing-domain Animal --domain=Tiger php artisan make:event-sourcing-domain Animal --domain=Lion
Specify the namespace
Read documentation with examples
php artisan make:event-sourcing-domain Tiger --namespace=MyDomain --domain=Animal
Advanced usage
Set primary key
Read documentation with examples
Default primary key is uuid. That will work with Aggregate class.
It is possible to use id as primary key:
php artisan make:event-sourcing-domain Animal --primary-key=id
When importing migrations, primary key will be automatically loaded from file.
Generate PHPUnit tests
Read documentation with examples
php artisan make:event-sourcing-domain Animal --unit-test
Generate aggregates
Read documentation with examples
php artisan make:event-sourcing-domain Animal --aggregate=1
This is available only for models using uuid as primary key.
Generate reactors
Read documentation with examples
php artisan make:event-sourcing-domain Animal --reactor=1
Generate failed events
Read documentation with examples
php artisan make:event-sourcing-domain Animal --failed-events=1
Generate notifications
Read documentation with examples
php artisan make:event-sourcing-domain Animal --notifications=<NOTIFICATIONS>
Specify indentation
Read documentation with examples
php artisan make:event-sourcing-domain Animal --indentation=2
Specify the path of root folder
Read documentation with examples
php artisan make:event-sourcing-domain Animal --root=src