softspring/doctrine-simple-translation-type-bundle
A Symfony bundle that adds a Doctrine DBAL type for simple translations, letting you store translatable strings in a single column instead of separate locale fields. Lightweight and easy to register, though it has little adoption and limited documentation.
Architecture fit — low for a Laravel stack. The package is softspring/doctrine-simple-translation-type-bundle: a Symfony bundle that adds a Doctrine DBAL custom type for storing simple translations. It assumes Symfony's bundle system (a Bundle class, DependencyInjection extension, config/bundles.php registration, Flex recipes). Laravel has none of that. Laravel's default persistence layer is Eloquent, not Doctrine ORM, so the package targets a component that is not present in a standard Laravel application.
Integration feasibility — possible but bespoke. A viable path exists only if the application already runs Doctrine within Laravel (e.g. laravel-doctrine/orm). Even then, the Symfony wiring must be replaced: the DBAL type has to be registered manually in Doctrine's types config, and the bundle's services (translation repository/resolver behaviour) must be re-declared in a custom ServiceProvider. Budget this as custom glue code you own, not a package install.
Technical risk — moderate to high.
Key questions to answer before commit:
spatie/laravel-translatable-style packages) with no cross-framework seam?Stack fit. Not a fit for a conventional Eloquent-based Laravel service. It is a fit for a Laravel service that has already made a deliberate Doctrine commitment and treats Doctrine as the system of record. If that commitment does not exist, this package is the wrong dependency and should be rejected at intake — the correct comparison set is Laravel-native translation packages.
Migration path. There is no incremental path from Eloquent to this package; adopting it implies standing up Doctrine entity metadata, a second persistence abstraction, schema tooling, and migration ownership. Scope it as an architecture change, not an integration. For teams already on Doctrine-in-Laravel, adoption is additive: register the DBAL type, map translated fields, and backfill existing translation rows into the type's expected storage shape via a one-time data migration.
Compatibility. Confirm three axes before any code: PHP minor version, Doctrine DBAL major version, and Doctrine ORM version. The Symfony bundle's service definitions may reference container features or annotation/attribute readers absent from a Laravel-resolved container. Pin the bundle version and the DBAL version together in composer.json and treat bumps of either as a coordinated change.
Sequencing.
schema:dump/migrations round-trip.Decision gate: if step 1 cannot be completed without patching vendor code, stop and revert to a Laravel-native approach.
Maintenance. The bundle's own maintenance is low-effort; your bridge is the maintenance liability. Every bundle release, DBAL upgrade, and framework upgrade is a triangulated change. Assume the bridge is yours forever and staff it accordingly — one named owner, not "the platform team."
Support. Upstream support for a non-Symfony consumer is effectively out of scope; do not plan on filing issues against a Laravel integration problem. Internal documentation must be sufficient to onboard without upstream assistance. The empty v5.3.15 changelog is a preview of the support posture: releases may arrive without rationale, so your own diff-and-pin discipline is the control.
Scaling. Translation lookups are read-heavy and locale-partitioned. The custom type's hydration path executes per-field per-entity, so cost compounds on collection queries — measure N+1 exposure on list endpoints rather than single-record fetches. Ensure locale-aware indexes exist at the storage layer; the type abstraction will not create them for you. Cache aggressively at the translation layer if locale cardinality is high.
Failure modes to instrument.
Ramp-up. Effectively two unfamiliar technologies at once for a typical Laravel team: Doctrine ORM (entity metadata, unit of work, DQL, schema tooling) and Symfony bundle internals (extensions, compiler passes, service definitions) — the latter only to read the package's source well enough to re-implement its wiring. Realistic estimate: 2–4 weeks before a mid-level Laravel engineer is productive, and only worthwhile if Doctrine is a durable architectural choice. If the team cannot absorb Doctrine, the ramp-up cost alone justifies rejecting this package.
Recommendation. Do not adopt for a standard Laravel/Eloquent application. Proceed only under an existing Doctrine commitment, gated on the step-1 spike and a recorded diff of v5.3.15. The release itself is a routine patch and does not change this conclusion.
How can I help you explore Laravel packages today?