alexandrebulete/ddd-doctrine-bundle
beberlei/doctrine-extensions or laravel-doctrine/orm for Doctrine integration.ServiceProvider or PackageServiceProvider.AppServiceProvider) can replace Symfony’s DI container wiring.DoctrineRepository base class simplifies repository implementation, reducing repetitive CRUD logic. In Laravel, this could be mapped to:
spatie/laravel-repository).PostIdType, PostTitleType) is highly valuable for DDD but requires:
laravel-doctrine/orm).config/doctrine.php).DoctrinePaginator can replace Laravel’s native pagination for complex queries, but may require adaptation to Laravel’s pagination contracts.ddd-doctrine-bridge package (dependency) for maturity.Why Doctrine Over Eloquent?
DDD Maturity
Performance Impact
Long-Term Maintenance
Alternative Solutions
spatie/laravel-repository or ash盟/laravel-domain provide similar DDD benefits without Doctrine?Core Stack Compatibility:
| Component | Laravel Equivalent | Notes |
|---|---|---|
| Symfony DI | Laravel’s Service Container | Replace autowiring with bind() or extend(). |
| Symfony Config | Laravel’s config/doctrine.php |
Manual configuration or use a package. |
| Doctrine ORM | laravel-doctrine/orm |
Required for full functionality. |
| Doctrine DBAL | laravel-doctrine/dbal |
For custom types and DDL. |
laravel-doctrine/orm as the foundation, then adapt the bundle’s logic.DDD-Specific Fit:
DoctrineRepository interfaces.Money, Email).Phase 1: Setup Doctrine in Laravel
laravel-doctrine/orm and laravel-doctrine/dbal.config/doctrine.php for database connections and entity managers.Phase 2: Adapt the Bundle
ddd-doctrine-bundle and replace Symfony dependencies with Laravel equivalents.Symfony\Config with Laravel’s config system.DddDoctrineServiceProvider to manually register:
DoctrineRepository base class.// app/Providers/DddDoctrineServiceProvider.php
public function register()
{
$this->app->bind(
DoctrineRepository::class,
fn() => new DoctrineRepository($this->app->make(EntityManager::class))
);
}
Phase 3: Integrate DDD Patterns
config/doctrine.php:
'doctrine' => [
'dbal' => [
'types' => [
'post_id' => \App\Post\Infrastructure\Doctrine\Type\PostIdType::class,
],
],
],
DoctrinePaginator for complex queries (e.g., in API controllers).Phase 4: Testing and Optimization
laravel-doctrine/orm and ddd-doctrine-bridge use compatible Doctrine versions.ContainerInterface) with Laravel equivalents.spatie/laravel-query-builder).How can I help you explore Laravel packages today?