msgphp/eav-bundle
A Symfony bundle for entity-attribute-value (EAV) modeling, letting you attach flexible, dynamic attributes and typed values to entities without schema changes. Integrates with Doctrine and the msgphp domain layer for extensible, metadata-driven data storage.
Architecture fit — poor, and the brief mislabels the stack. msgphp/eav-bundle is a Symfony bundle, not a Laravel package. It ships a Bundle subclass wired through Symfony's kernel, DI container and DoctrineBundle conventions, and it sits on top of a family of first-party packages (msgphp/eav domain, msgphp/doctrine-bridge, msgphp/domain, msgphp/user). It assumes: Doctrine ORM entities and mapping, Symfony service tagging/compiler passes, and the msgphp DDD/messaging idioms (commands, events, repositories). None of that maps onto Laravel's Eloquent-first, service-provider-driven container without a rewrite. The EAV domain model is the only genuinely reusable asset here — and it is small enough to reimplement.
Integration feasibility — effectively zero for a Laravel codebase. Realistic paths and why each fails:
| Path | Verdict |
|---|---|
| Install into Laravel via Composer | Fails. Bundle registration has no Laravel analogue; Symfony Bundle + compiler passes are inert. |
Run Doctrine alongside Eloquent (laravel-doctrine/orm) and hand-wire the bundle's services |
Technically possible, practically an anti-pattern: two ORMs, two identity maps, transaction boundaries across both, and you still own the wiring the bundle was supposed to give you. |
Port msgphp/eav domain classes and rebuild persistence on Eloquent |
Viable — but this is a rewrite, at which point the bundle contributes almost nothing. |
| Use it as a reference design only | Recommended. |
Technical risk — high, dominated by abandonment, not code quality.
msgphp/*) that is dormant. No security triage, no PHP/Symfony/Doctrine version bumps, no issue response.opportunity: 9.65 score is an artifact of the unmet-need signal (EAV is a recurring requirement), not evidence of package viability. Weight score: 0.03, stars and dependents far more heavily.Key questions to resolve before any commitment:
Recommendation: do not adopt. Treat the repo as a design reference for the EAV domain (attribute / value / type separation, repository boundaries) and build the capability natively in Laravel.
Stack fit. The target stack is Laravel + Eloquent (+ optionally a search service). The bundle's fit is Symfony + Doctrine. There is no supported bridge. The pragmatic Laravel-native options, in order of preference:
json/jsonb column with generated columns or functional indexes for the handful of attributes that must be filtered. Lowest operational cost, best query planner behaviour, weakest for unbounded attribute counts.attributes, attribute_values with entity_type, entity_id, attribute_id, typed value columns or JSON value). Best for genuinely runtime-defined schemas and admin UIs; worst for query complexity and performance at scale.Pick (1) unless requirement #1 and #2 above both point to runtime-defined schemas with faceted search — then (3) with (2) as the write model.
Migration path. There is no incremental adoption path from this package, so sequencing is entirely greenfield:
Compatibility. Verify early and explicitly: target PHP version, Laravel major, database engine and version (MySQL 8.0.13+ for functional indexes; Postgres 12+ for jsonb GIN and generated columns). The bundle's constraints will almost certainly conflict with any of these; a composer require attempt is a 15-minute spike that will confirm the dead end and should be timeboxed to exactly that.
Sequencing (suggested, ~4–6 eng-weeks end to end):
Maintenance. You own 100% of it from day one — there is no upstream. That is a feature (no surprise breaking changes, no abandoned transitive deps) but it means EAV becomes a small internal product with a named owner, a test suite, and a documented query API. Budget ~10–15% of one engineer ongoing, plus the admin UI which will attract continuous feature requests from whoever manages attributes.
Support. No vendor, no community, no security advisories. If a CVE lands in a transitive dependency of the bundle, there will be no patched release — the mitigation is not depending on it. This alone disqualifies it for anything with a compliance or long-horizon support obligation.
Scaling. EAV's cost profile is the main operational hazard:
GROUP BY/HAVING puzzles; the query planner degrades non-linearly as attribute count rises. This is the failure mode that usually forces a migration to a search index 18 months in.Failure modes to design against:
Ramp-up. For the team: low framework risk (the rebuilt version is plain Laravel), but a real conceptual curve on EAV modelling, type systems and the query API. Half a day of design documentation plus the week-0 spike memo is sufficient onboarding. For a Symfony/msgphp-fluent engineer the bundle's idioms would be familiar, but that expertise buys little here since the plan is to rebuild rather than adopt — its only value is a shorter design phase on the domain layer.
Bottom line for the roadmap: the unmet need (opportunity: 9.65) is real and recurring; this package is not the vehicle for it. Fund a 1-week spike to choose between JSON-hybrid and EAV-table schemas, then build the domain natively in Laravel. Estimated total: 4–6 engineer-weeks plus ongoing ~15% FTE ownership.
How can I help you explore Laravel packages today?