Weave 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

Doctrine Extensions Bundle Laravel Package

mkietlinski/doctrine-extensions-bundle

A Symfony bundle that integrates Gedmo's Doctrine extensions, making it easy to register and configure behaviors like timestampable, sluggable, softdelete, tree, translatable, and blameable across your entities with minimal setup.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. The framing here needs correcting before anything else: this is a Symfony bundle, not a Laravel package. Its entire contribution is framework glue — a Bundle class, a DI extension, and config-driven registration of Gedmo's Doctrine event subscribers. Laravel does not discover or boot Symfony bundles, so in a Laravel target that layer is dead weight. The capability underneath (gedmo/doctrine-extensions: Timestampable, Sluggable, SoftDeleteable, Tree, Translatable, Blameable, Loggable, Sortable) is real and roadmap-relevant; this distribution delivers none of it to a Laravel app. From a TPM standpoint the value proposition — "turn weeks of cross-cutting feature work into configuration" — is valid for the underlying library and zero for the package.

Integration feasibility. Low, and not worth forcing. The only working path is to depend on gedmo/doctrine-extensions directly and register subscribers in a DoctrineServiceProvider — which means the package under evaluation is removed, not integrated. Adopting it as-is would require pulling in Symfony's DI/config/kernel machinery solely to satisfy a contract nothing else in the stack honors. That is a cost with no corresponding scope reduction.

Technical risk. High, and driven by provenance rather than code quality:

  • Bus factor. 0 stars, 0 dependents, single maintainer, downstream fork of a mature upstream (stof/doctrine-extensions-bundle). No signal of maintenance against Doctrine ORM 3.x, PHP 8.3+, or Symfony 7.
  • Supply-chain opacity. The Composer name (mkietlinski/doctrine-extensions-bundle) does not match the repository name (StofDoctrineExtensionsBundle). That obscures fork-vs-upstream provenance and makes security review of the delta harder than it should be.
  • Fork drift. A fork earns its existence only through patches; those patches are invisible without a diff against upstream and will rot silently as upstream advances.
  • Version skew. Gedmo is tightly coupled to Doctrine ORM internals and has a documented history of breaking on minor upgrades; the fork publishes no compatibility statement, so the matrix must be established empirically.

Key questions for the requester. (1) Is any part of the estate actually Symfony, or is this a mis-specified dependency that should be closed? (2) Which behaviors are genuinely required — most have mature Eloquent-native equivalents. (3) What specific upstream defect motivated the fork, and who owns patching it? (4) Which PHP, Doctrine ORM, and Symfony versions must be supported? (5) Is persistence Eloquent or laravel-doctrine/orm? That single answer flips the recommendation.

Integration Approach

Stack fit. Three viable paths, none of which is this fork:

  • Symfony in scope: adopt upstream stof/doctrine-extensions-bundle — same abstraction, maintained, documented, with a real user base.
  • Laravel + Doctrine: depend on gedmo/doctrine-extensions, resolve the EntityManager, fetch its EventManager, and register subscribers in a service provider. A small config file plus a provider is less code than vendoring the bundle, and it is code you control.
  • Laravel + Eloquent (most likely): do not adopt. Map each behavior to a first-party or established package — SoftDeletes/Timestamps are native; Sluggable → spatie/laravel-sluggable; Translatable → spatie/laravel-translatable; Tree → kalnoy/nestedset; Loggable → spatie/laravel-activitylog; Blameable → model observers.

Migration path. If the team is already on Gedmo via this fork, migration is mechanical: pin stof upstream at the matching major (or drop to gedmo/doctrine-extensions on Laravel), port the extension config block, remove the fork from composer.json, verify all entity mappings load. Budget half a day per environment — the risk is not code volume but listener registrations silently disappearing.

Compatibility. Before any adoption, pin and test explicitly: PHP minor, Doctrine ORM 2.x vs 3.x, attribute vs annotation metadata driver, and Symfony 5/6/7 if applicable. The fork states nothing; treat every cell as unverified until a prototype passes.

Sequencing. (1) Confirm the framework target and close out the mis-specification — this is the cheapest possible resolution. (2) Inventory entities and name the exact behaviors required, nothing speculative. (3) Choose upstream or Eloquent-native per behavior, not as a single block decision. (4) Prototype on one low-risk entity, asserting soft-delete filtering and timestamp writes end-to-end. (5) Roll out behavior-by-behavior with integration tests that prove listener execution, not merely the absence of exceptions. (6) Remove the fork and pin the chosen dependency.

Operational Impact

Maintenance. The fork is a standing liability, not a one-time adoption cost: every Doctrine bump and PHP upgrade becomes a manual rebase against a package with no maintainer depth. Zero dependents means you are the only consumer — nobody else catches a break first, and there is no path to upstreaming your patches.

Support. No community, no meaningful issue history, no documentation beyond upstream's. Internal escalation is the only channel, which means someone must own the upstream diff as an ongoing named responsibility. As a TPM, that is a headcount commitment, not a footnote.

Scaling. Gedmo extensions are lifecycle listeners; costs are behavioral rather than linear:

  • Translatable multiplies rows per locale and adds join complexity — index strategy must be designed up front.
  • Loggable writes an audit row per change — meaningful secondary write load on hot tables, and it needs a retention policy.
  • Tree (nested set) turns inserts and moves into multi-row updates — safe for read-heavy hierarchies, risky under concurrent writes.
  • Sluggable adds a read-before-write and a uniqueness retry loop; hotspots on high-cardinality title columns.
  • Soft-delete filtering changes the shape of every query — expect index and query-plan reviews on large tables.

Failure modes. The dangerous ones are silent:

  • Listener not registered — behavior is configured but never fires; surfaces in production as missing timestamps or duplicate slugs.
  • Soft-delete filter leakage — a disabled filter on one code path returns "deleted" records into API responses. That is a data-exposure class of bug, not a correctness nit, and it is the one I would raise with security.
  • Mapping load failure — attribute/annotation mismatch or version skew throws at bootstrap; loud, at least.
  • Nested-set corruption — an interrupted tree operation leaves inconsistent bounds; recovery means a tree rebuild.
  • Transitive conflict — a gedmo/doctrine-extensions bump breaks the fork's pinned constraints and blocks unrelated dependency upgrades app-wide.

Ramp-up. Doctrine's UnitOfWork and lifecycle events are a different mental model from Eloquent. Engineers fluent in Laravel need real (not nominal) ramp-up on entity state, flush timing, and event ordering before Gedmo behavior is debuggable — roughly one to two weeks to productive competence for a mid-level engineer, plus ownership of the fork diff. On an Eloquent codebase that entire cost is avoidable.

Recommendation. Do not adopt. The underlying Gedmo behaviors are worth having on the roadmap; this specific distribution is not — it is a Symfony-only shim with no adoption, no maintenance signal, and no fit for a Laravel target. Standardize on upstream stof/doctrine-extensions-bundle where Symfony is genuinely in scope, on gedmo/doctrine-extensions with an in-house Laravel provider where Doctrine is in use, and on Eloquent-native equivalents otherwise. Treat this package as closed unless the requester can confirm a Symfony target and a specific upstream defect the fork resolves.

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.
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle
glavweb/extra-bundle
glavweb/api-bundle
glavweb/admin-bundle
adachsoft/api-version-bundle
elsayed85/laravel-api-exceptions
ouhssini/laravel-demo-mode
daworks/ncloud-outbound-mailer-driver
gp247/cms
ignibyte/aic-gates
nexa-merchant/blog
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
cgv/localized-resource