Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message
Persistence

Persistence Laravel Package

doctrine/persistence

Doctrine Persistence provides shared abstractions for persistence and object mappers in the Doctrine ecosystem. It defines common interfaces and utilities used by Doctrine ORM and related libraries to manage mapping, metadata, and repository behavior across storage backends.

View on GitHub
Deep Wiki
Context7

The Doctrine Persistence project is a library that provides common abstractions for object mapper persistence.

Frequently asked questions about Persistence
Can I use doctrine/persistence with Laravel’s Eloquent for a hybrid ORM approach?
No, this package is designed for Doctrine ORM/ODM and won’t work directly with Eloquent. However, you can create a custom abstraction layer (e.g., a service wrapping Doctrine’s ObjectManager) to bridge the two. For example, implement a `DoctrineRepository` trait that extends `ObjectRepositoryTrait` and adapts Doctrine’s behavior for Laravel’s repository pattern.
What Laravel versions support doctrine/persistence v4.x, and how do I check compatibility?
Doctrine Persistence v4.x requires PHP 8.1+, so it’s fully compatible with Laravel 10+. For Laravel 9.x or older, use v3.4.x, but note that v3.x is in maintenance mode. Check your Laravel version with `php artisan --version` and verify PHP compatibility via `php -v`. Always test in a staging environment before upgrading.
How do I install doctrine/persistence in a Laravel project?
Run `composer require doctrine/persistence` to install the core package. If using Doctrine ORM, also install `doctrine/orm` and `laravel-doctrine/orm` for Laravel integration. Configure Doctrine in `config/doctrine.php` (provided by `laravel-doctrine/orm`) and publish migrations with `php artisan doctrine:migrations:diff`. Avoid direct `doctrine/persistence` usage without ORM/ODM.
Will doctrine/persistence slow down my Laravel application’s performance?
Yes, Doctrine’s reflection-based metadata system adds initialization overhead (~50–200ms for large entity graphs), especially on first load. For performance-critical paths (e.g., bulk operations), consider caching metadata with `doctrine/cache` or using Eloquent for simpler CRUD. Benchmark with `php artisan tinker` to compare query speeds between Eloquent and Doctrine.
How do I mock doctrine/persistence’s ObjectManager in Laravel’s PHPUnit tests?
Use PHPUnit’s `createMock()` to mock `ObjectManager` or `EntityManager`, but beware of Doctrine’s tight coupling with PSR-11 containers. For example: `$mockManager = $this->createMock(ObjectManager::class); $mockManager->method('find')->willReturn(new YourEntity());`. For repositories, extend `ObjectRepository` and override methods. Test doubles may require custom setup due to Doctrine’s event listeners.
Can I use doctrine/persistence for event sourcing or CQRS in Laravel?
Yes, this package provides the `LifecycleEventArgs` and event system needed for event sourcing or CQRS. For example, listen to `prePersist` or `postUpdate` events to trigger domain events. Combine with `laravel-doctrine/orm` and a message broker (e.g., Laravel Queues) to dispatch events asynchronously. Document your event handlers clearly to avoid side effects.
What are the risks of upgrading from doctrine/persistence v3.x to v4.x in a Laravel project?
v4.x introduces breaking changes like PHP 8.1+ requirements and removed `StaticReflectionService`. If your project uses Doctrine ORM v3.x, upgrade incrementally: first migrate to ORM v4.x, then test persistence v4.x. Use `composer why-not doctrine/persistence:^4.0` to check dependency conflicts. Backup your database and test in a staging environment before production deployment.
How do I configure doctrine/persistence to work with multiple database backends (e.g., MySQL + MongoDB) in Laravel?
Use Doctrine’s multi-connection support via `laravel-doctrine/orm` and configure separate `EntityManager` instances for each backend in `config/doctrine.php`. For example, define `default` (MySQL) and `mongodb` (MongoDB ODM) connections. Share repository interfaces (e.g., `UserRepository`) across managers but implement backend-specific logic. Test cross-backend transactions carefully.
Are there alternatives to doctrine/persistence for standardized repositories in Laravel?
For Eloquent-based projects, consider `spatie/laravel-repository` for a lightweight repository pattern without Doctrine. If you need Doctrine’s features, `doctrine/persistence` is the only standardized option, but alternatives like `CycleORM` or `RedBeanPHP` offer different trade-offs. Evaluate based on your needs: Doctrine excels in complex queries and legacy systems, while Eloquent or CycleORM may suffice for simpler architectures.
How do I handle Doctrine’s metadata caching in a Laravel production environment?
Configure Doctrine’s metadata cache using `doctrine/cache` with a fast backend like APCu or Redis. In `config/doctrine.php`, set `'metadata_cache_driver'` to `'apcu'` or `'redis'`. For shared hosting, use file-based caching (`'file'`) but ensure the cache directory is writable. Clear the cache after schema changes with `php artisan doctrine:cache:clear`. Monitor cache hits/misses with Doctrine’s profiling tools.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
codraw/framework-extra-bundle
codraw/messenger
codraw/security
codraw/mailer
codraw/contracts
codraw/profiling
codraw/dependency-injection
codraw/tester
codraw/core
nexmo/api-specification
capell-app/block-library
axium/identity
cetria/laravel-dummy-models
cetria/reflection-helper
agropredict/sso-auth-bundle
evolvestudio/spam-protection
datacore/hub-sdk
develia/commons
cuci/prototurk-sdk
cuci/prototurk-sdk-symfony