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

Entity Extend Bundle Laravel Package

evozon-php/entity-extend-bundle

Evozon EntityExtendBundle is a Symfony bundle for extending Doctrine entities with additional fields without modifying their classes. Configure extra attributes, persist values, and use them alongside existing entity data.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. The first thing a TPM must flag is a category mismatch: this is a Symfony bundle, not a Laravel package. It extends pjarmalavicius/PjEntityExtendBundle and depends on Symfony's bundle/DI/compiler-pass machinery plus Doctrine ORM event listeners and metadata drivers. It will not install into a Laravel application via Composer in any usable way — there is no service provider, no config publishing, no Laravel-facing API. If the target stack is Laravel/Eloquent, architectural fit is effectively zero; if the target stack is Symfony + Doctrine, fit is plausible but the package is a niche fork of an already-niche concept (runtime entity extension via generated/derived entities and extension tables — an EAV-adjacent pattern).

Integration feasibility. Low for a Laravel codebase. The bundle's value proposition is dynamic schema extension of Doctrine entities at the ORM metadata layer — it hooks entity mapping, generates extended entity classes, and routes persistence through Doctrine listeners. Reproducing that in Laravel means abandoning Eloquent for Doctrine (laravel-doctrine/orm), then re-implementing the bundle's compiler passes and listeners outside Symfony's container — a substantial custom port with no upstream support. A feasibility spike would realistically conclude "port the pattern, not the package."

Technical risk.

  • Viability risk (high): 0 stars, 0 dependents, 0 score. No observable adoption, no ecosystem validation, no third-party bug reports — meaning no evidence the edge cases have been exercised outside the author's context.
  • Maintenance risk (high): a one-person "slight variation" fork. Divergence from upstream is undocumented; patches may never be upstreamed and upstream fixes may never be merged.
  • Version-coupling risk (high): tightly bound to specific Symfony and Doctrine ORM major versions. Symfony 4→5→6 and Doctrine ORM 2→3 changes to metadata drivers, event listeners, and attribute mapping are exactly the surfaces this package touches. Expect breakage on upgrade.
  • Correctness risk (medium-high): dynamic entity extension implies runtime class generation, discriminator/mapping manipulation, and schema/migration drift. Failures here manifest as corrupted mappings or silent data loss, not clean exceptions.
  • Security/supply-chain risk (medium): unmaintained, low-visibility dependency with broad ORM interception privileges.

Key questions.

  1. Is the target application Laravel/Eloquent or Symfony/Doctrine? If Laravel, this package is out of scope and we should evaluate alternatives rather than pursue a port.
  2. What is the actual business requirement — user-defined custom fields, per-tenant schema variation, or plugin-style entity augmentation? The right tool differs sharply per answer (JSON columns vs. attribute tables vs. dynamic entities).
  3. Who owns patching this if the fork goes stale? What is the budget for a vendored fork?
  4. Which Symfony/Doctrine versions are in production, and does the bundle's constraint set actually resolve against them?
  5. Is schema-migration determinism a hard requirement (audited/regulated data)? If so, runtime-generated mapping is likely disqualifying.

Integration Approach

Stack fit. Poor-to-none for Laravel. The package assumes Symfony's Kernel, bundle registration, DI compiler passes, Doctrine's ClassMetadata/EventSubscriber pipeline, and YAML/annotation mapping conventions. Laravel's container, Eloquent models, and migration system share none of these primitives. Integration effort is not "configure and go" — it is "rewrite the mechanism."

Migration path (ranked, cheapest first).

  1. Do not adopt the package. Treat it as a reference implementation for the pattern of dynamic entity extension.
  2. Requirement-fit alternatives in Laravel:
    • JSON/jsonb columns with castable value objects — simplest, indexable in MySQL 8/Postgres, good for sparse custom fields.
    • Dedicated attribute/extension tables (entity_id, key, value_type, value) with typed value columns — the classic EAV-lite approach, explicit and migratable.
    • Community packages such as spatie/laravel-schemaless-attributes or laravel-metable for the same shape with maintained code.
    • Physical column additions via generated migrations if the field set is small and stable — best query performance, worst flexibility.
  3. If the team is genuinely on Symfony + Doctrine, evaluate upstream pjarmalavicius/PjEntityExtendBundle first, compare the fork's diff, and only adopt if the delta is small and the Symfony/Doctrine constraint matrix matches production.

Compatibility. Verify Composer constraints against current Symfony LTS and Doctrine ORM 3.x. Given the fork's age and zero dependents, assume incompatibility until proven otherwise. Attribute-based mapping (PHP 8 attributes replacing annotations) is a likely break point.

Sequencing.

  1. Week 1 — Requirements and stack confirmation. Pin down the dynamic-field use case and confirm Laravel vs. Symfony.
  2. Week 1–2 — Spike. Timebox a 2–3 day proof of concept: attempt install in a scratch Symfony app (to understand the mechanism) and prototype the JSON-column or attribute-table approach in the actual Laravel app.
  3. Week 2 — Decision gate. Adopt a maintained alternative or internal implementation; formally reject the bundle with a written rationale.
  4. Week 3+ — Build. Implement the chosen pattern behind a repository/attribute-service interface so the storage strategy can be swapped later without touching domain code.
  5. Later — Revisit only if a maintained, version-current, adopted package emerges in this space.

Operational Impact

Maintenance. Adopting an unmaintained fork means the team owns it: forking, patching, tracking Symfony/Doctrine releases, and re-validating on every framework upgrade. Budget a recurring ~0.1–0.2 FTE indefinitely, or accept that it becomes a frozen pin blocking framework upgrades — which is a worse outcome.

Support. No vendor, no SLA, no active issue tracker to speak of, and no community to answer questions. Internal escalation path is "the one engineer who read the source." This is the highest-friction operational cost and should be stated plainly to stakeholders.

Scaling. Dynamic entity extension is EAV-adjacent by nature: it trades query simplicity and index efficiency for schema flexibility. Expect multi-table joins per entity load, more complex hydration, and performance that degrades with the number of extensions per entity. At scale, the runtime metadata manipulation also adds per-request overhead unless aggressively cached — and cache invalidation of generated entity classes is a classic operational footgun.

Failure modes.

  • Silent mapping corruption after a Doctrine upgrade → wrong columns read/written, data integrity damage.
  • Generated-class cache staleness in multi-node deployments → inconsistent behavior across app servers after deploy.
  • Migration drift: ORM-level extensions not reflected in the migration system → schema out of sync, environment-specific breakage.
  • Abandoned dependency resolution failure on composer update → blocked security patching of unrelated packages.
  • Poor debuggability: issues surface deep in the ORM event pipeline rather than in application code.

Ramp-up. Steep and concentrated. The pattern is non-obvious, the documentation is a fork of an original's docs at best, and there are no tutorials, no Stack Overflow corpus, and no dependents to learn from. Realistic estimate: 3–5 days for a senior engineer to understand the mechanism, and a further 5–10 days before anyone can safely modify it. For a Laravel-only team, the effective ramp-up is "learn Symfony bundles and Doctrine internals first" — which is a different and much larger investment than the package itself warrants.

Recommendation. Reject for a Laravel stack outright. For a Symfony/Doctrine stack, treat as a last-resort option requiring a vendor-fork commitment and a documented upgrade burden. The underlying requirement (dynamic entity extension) is real and worth solving — but with a maintained alternative or a small internal implementation behind a stable interface, not with a zero-adoption fork.

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.
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox
pairus/product-data
fayne/laravel-filament-cms-core