webit/doctrine-json-bundle
Webit Doctrine JSON Bundle adds JSON column support to Doctrine in Symfony applications. It provides custom DBAL types and query helpers so you can store, retrieve, and query structured JSON data directly from your entities with minimal configuration.
json DBAL type, this bundle can unblock storing semi-structured payloads (tenant config, feature flags, audit metadata, third-party webhook bodies) without a schema migration per new field.Consider it only when all of the following hold:
json column type, and a framework upgrade is off the table for this cycle.Look elsewhere (or build in-house) when:
->> operators, index-backed containment). This bundle is a persistence shim, not a query layer; you'll want native JSONB on PostgreSQL, MySQL generated columns, or a document store.To executives: A community package was evaluated for adding flexible JSON data storage. Recommendation: do not adopt it as a dependency. It has negligible adoption (1 star, no downstream users), which means unmaintained code sitting in our critical data path — a compliance, security-patching, and continuity risk disproportionate to the small amount of functionality it provides. The underlying need is real and on the roadmap; the right answer is either a Doctrine upgrade (native JSON support, zero new dependencies) or roughly a day of internal engineering to replicate the capability with code we own and can audit.
To engineering: Treat this as a capability reference, not a dependency. The bundle's scope — a custom Doctrine DBAL type for JSON columns, with mapping and serialization — is small enough to implement internally in a few dozen lines and test properly, and doing so removes an unowned third-party from our upgrade path. If there is a hard deadline and a legacy Doctrine version blocking native JSON, fork the code into an internal namespace as a clearly-labeled stopgap, isolate it behind a repository/service boundary, and log a follow-up to delete it once the Doctrine upgrade lands. Do not let it leak into domain entities directly.
Bottom line: The need is legitimate; this specific package is not the answer for anything but a short-lived legacy workaround.
How can I help you explore Laravel packages today?