symfony/doctrine-bridge
Symfony Doctrine Bridge connects the Doctrine project with Symfony components, supplying form types, validators, security user providers, event listeners, and other integration code for Doctrine-backed Symfony apps. A core part of the Symfony framework.
Framing correction up front: symfony/doctrine-bridge is a Symfony component, not a Laravel package. It is the glue layer that wires Doctrine ORM/DBAL/ODM into Symfony's HttpKernel (entity argument resolution / MapEntity), Form (EntityType), Validator (UniqueEntity, DoctrineLoader), Security (EntityUserProvider), PropertyInfo, Serializer, Uid, and DBAL schema tooling. Almost none of that glue has a consumer in a stock Laravel application, which uses Eloquent plus doctrine/dbal for schema introspection only. The TPM decision is therefore not "how do we adopt this?" but "which narrow slices, if any, justify the coupling?"
Architecture fit
AbstractDoctrineExtension — deprecated in 7.4 and removed in 8.0; Form type guessers; the Security entity user provider). Laravel substitutes its own container, validation, auth, and form layer, so those classes are dead weight or actively unusable.Uid-based types, the new DayPointType/TimePointType), PropertyInfo\DoctrineExtractor (entity metadata → type info, useful for building validation rules or API schemas), UniqueEntity-style validation semantics, ManagerRegistry-shaped manager reset, the idle-connection listener, and the proxy cache warmer.Integration feasibility
PropertyInfo type metadata from Doctrine mappings; reuse schema-listener logic in dbal-based migration tooling.EntityValueResolver/MapEntity (no Symfony HttpKernel argument resolver pipeline), EntityType (no Symfony Form), EntityUserProvider (Laravel's guard/user provider contract differs), AbstractDoctrineExtension (removed in 8.0).symfony/* components and a supported doctrine/dbal range. 8.x requires PHP >= 8.4; 7.4 targets PHP 8.2+; 6.4 is the LTS line.Technical risk
symfony/uid, symfony/property-info, symfony/type-info and their pins. Any future Symfony major bump becomes our migration.TableEditor API migration, configureSchema()), with follow-up fixes for older DBAL (fix compatibility with DBAL < 4.5). DBAL 4.5 support only landed in 6.4.42, 7.4.14, and 8.1.1 — earlier pins in the same branches are affected.schema_filter ignored in schema listeners, lazy listeners lost when a lazy listener registers another listener, and MapEntity mapping overwritten by route mapping. These fail quietly, not loudly, which is the worst failure profile for a data layer.symfony/symfony monorepo, so triage and history are split from this repo. "Dependents: 0" should be treated as a metric artifact of the monorepo read-only split, not as an adoption signal — verify against Packagist before drawing conclusions.Key questions
symfony/* version bumps as a standing maintenance task, or is that unbudgeted?7.4/8.x lines, or are we pinned to 6.4 LTS, and what is the exit date for that pin?Stack fit
Uid-based types and DayPointType/TimePointType — registered through Laravel's DB::connection()->getDoctrineConnection() / DBAL type registration. Small surface, testable, reversible.PropertyInfo\DoctrineExtractor where we already have Doctrine mappings, to derive validation metadata or OpenAPI schemas instead of hand-maintaining rules.HttpKernel, Form, Security, and the DI extension classes. No consumer in Laravel; AbstractDoctrineExtension is gone in 8.0 anyway.Migration path
doctrine/dbal and symfony/* versions (Laravel migrations and schema diffing already depend on DBAL). Establish the exact compatible bridge branch before any code is written.PropertyInfo\DoctrineExtractor call path in a non-critical module; verify round-trip persistence, migration diffing, and serialization behavior.Compatibility
6.4 LTS for PHP 8.1–8.3 estates, 7.4 for PHP 8.2+, 8.x only if we are on PHP 8.4+.6.4.42 / 7.4.14 / 8.1.1 if DBAL 4.5 is in the tree.symfony/doctrine-bridge and the rest of symfony/* drift across minor versions.Sequencing
schema_filter correctness) → metadata/validation second → lifecycle/Octane concerns third → full ORM wiring only after an explicit go/no-go. Avoid bundling the lifecycle work with the type work; the failure modes are unrelated.Maintenance
symfony/* set, clear deprecations ahead of each major, and re-run integration tests. The 8.0 line removed AbstractDoctrineExtension and entity-to-controller auto-mapping — precedent that majors will remove, not just deprecate.symfony/symfony issue numbers. Reading upstream history requires leaving this repo — factor that into on-call documentation.Support
symfony/symfony; issues filed against this repo are redirected. Symfony commercial support exists separately if we need a contractual path for a data-layer dependency.Scaling
.php-filter fix (ProxyCacheWarmer) matters if we warm caches concurrently — a non-.php file in the proxy dir previously broke CacheWarmerAggregate.Failure modes to watch
MapEntity overwritten by route mapping. Symptom is wrong data, not exceptions.schema_filter ignored in schema listeners (pre-fix) means listeners can act on tables outside their scope — high blast radius in shared databases. Also Oracle-specific table-name constraints and same-database check exception handling (PDO, "catch any driver exception").TableEditor) and PHP 8.6 deprecation fixes are recurring; an unpinned DBAL minor can break the bridge mid-cycle.Ramp-up
PropertyInfo extractor) with a hard two-sprint timebox and an explicit "not adopting Symfony integration points" decision record; reject whole-package or ORM-level adoption unless a separate Doctrine ORM business case is approved.How can I help you explore Laravel packages today?