martin-georgiev/postgresql-for-doctrine
Adds PostgreSQL-specific power to Doctrine DBAL/ORM: rich native types (jsonb, arrays, ranges, network, geometric, etc.) plus DQL functions/operators for JSON and array querying. Supports PostgreSQL 9.4+ and PHP 8.2+.
This guide covers integration with Symfony 6.4+ and 7.x using the DoctrineBundle.
Register the DBAL types you plan to use. The full set of available types can be found in AVAILABLE-TYPES.md.
# config/packages/doctrine.yaml
doctrine:
dbal:
types:
# Binary types
bytea: MartinGeorgiev\Doctrine\DBAL\Types\Bytea
'bytea[]': MartinGeorgiev\Doctrine\DBAL\Types\ByteaArray
# Bit types
bit: MartinGeorgiev\Doctrine\DBAL\Types\Bit
'bit[]': MartinGeorgiev\Doctrine\DBAL\Types\BitArray
'bit varying': MartinGeorgiev\Doctrine\DBAL\Types\BitVarying
'bit varying[]': MartinGeorgiev\Doctrine\DBAL\Types\BitVaryingArray
# Array types
'bool[]': MartinGeorgiev\Doctrine\DBAL\Types\BooleanArray
'smallint[]': MartinGeorgiev\Doctrine\DBAL\Types\SmallIntArray
'integer[]': MartinGeorgiev\Doctrine\DBAL\Types\IntegerArray
'bigint[]': MartinGeorgiev\Doctrine\DBAL\Types\BigIntArray
'double precision[]': MartinGeorgiev\Doctrine\DBAL\Types\DoublePrecisionArray
'real[]': MartinGeorgiev\Doctrine\DBAL\Types\RealArray
'text[]': MartinGeorgiev\Doctrine\DBAL\Types\TextArray
'uuid[]': MartinGeorgiev\Doctrine\DBAL\Types\UuidArray
# Date and time types
'date[]': MartinGeorgiev\Doctrine\DBAL\Types\DateArray
interval: MartinGeorgiev\Doctrine\DBAL\Types\Interval
'interval[]': MartinGeorgiev\Doctrine\DBAL\Types\IntervalArray
'timestamp[]': MartinGeorgiev\Doctrine\DBAL\Types\TimestampArray
'timestamptz[]': MartinGeorgiev\Doctrine\DBAL\Types\TimestampTzArray
timetz: MartinGeorgiev\Doctrine\DBAL\Types\Timetz
'timetz[]': MartinGeorgiev\Doctrine\DBAL\Types\TimetzArray
# JSON types
jsonb: MartinGeorgiev\Doctrine\DBAL\Types\Jsonb
'jsonb[]': MartinGeorgiev\Doctrine\DBAL\Types\JsonbArray
# Network types
cidr: MartinGeorgiev\Doctrine\DBAL\Types\Cidr
'cidr[]': MartinGeorgiev\Doctrine\DBAL\Types\CidrArray
inet: MartinGeorgiev\Doctrine\DBAL\Types\Inet
'inet[]': MartinGeorgiev\Doctrine\DBAL\Types\InetArray
macaddr: MartinGeorgiev\Doctrine\DBAL\Types\Macaddr
'macaddr[]': MartinGeorgiev\Doctrine\DBAL\Types\MacaddrArray
macaddr8: MartinGeorgiev\Doctrine\DBAL\Types\Macaddr8
'macaddr8[]': MartinGeorgiev\Doctrine\DBAL\Types\Macaddr8Array
# Geometric types
box: MartinGeorgiev\Doctrine\DBAL\Types\Box
'box[]': MartinGeorgiev\Doctrine\DBAL\Types\BoxArray
circle: MartinGeorgiev\Doctrine\DBAL\Types\Circle
'circle[]': MartinGeorgiev\Doctrine\DBAL\Types\CircleArray
line: MartinGeorgiev\Doctrine\DBAL\Types\Line
'line[]': MartinGeorgiev\Doctrine\DBAL\Types\LineArray
lseg: MartinGeorgiev\Doctrine\DBAL\Types\Lseg
'lseg[]': MartinGeorgiev\Doctrine\DBAL\Types\LsegArray
path: MartinGeorgiev\Doctrine\DBAL\Types\Path
'path[]': MartinGeorgiev\Doctrine\DBAL\Types\PathArray
point: MartinGeorgiev\Doctrine\DBAL\Types\Point
'point[]': MartinGeorgiev\Doctrine\DBAL\Types\PointArray
polygon: MartinGeorgiev\Doctrine\DBAL\Types\Polygon
'polygon[]': MartinGeorgiev\Doctrine\DBAL\Types\PolygonArray
# PostGIS spatial types
geometry: MartinGeorgiev\Doctrine\DBAL\Types\Geometry
'geometry[]': MartinGeorgiev\Doctrine\DBAL\Types\GeometryArray
geography: MartinGeorgiev\Doctrine\DBAL\Types\Geography
'geography[]': MartinGeorgiev\Doctrine\DBAL\Types\GeographyArray
# Range types
daterange: MartinGeorgiev\Doctrine\DBAL\Types\DateRange
'daterange[]': MartinGeorgiev\Doctrine\DBAL\Types\DateRangeArray
int4range: MartinGeorgiev\Doctrine\DBAL\Types\Int4Range
'int4range[]': MartinGeorgiev\Doctrine\DBAL\Types\Int4RangeArray
int8range: MartinGeorgiev\Doctrine\DBAL\Types\Int8Range
'int8range[]': MartinGeorgiev\Doctrine\DBAL\Types\Int8RangeArray
numrange: MartinGeorgiev\Doctrine\DBAL\Types\NumRange
'numrange[]': MartinGeorgiev\Doctrine\DBAL\Types\NumRangeArray
tsrange: MartinGeorgiev\Doctrine\DBAL\Types\TsRange
'tsrange[]': MartinGeorgiev\Doctrine\DBAL\Types\TsRangeArray
tstzrange: MartinGeorgiev\Doctrine\DBAL\Types\TstzRange
'tstzrange[]': MartinGeorgiev\Doctrine\DBAL\Types\TstzRangeArray
# Multirange types
datemultirange: MartinGeorgiev\Doctrine\DBAL\Types\DateMultirange
'datemultirange[]': MartinGeorgiev\Doctrine\DBAL\Types\DateMultirangeArray
int4multirange: MartinGeorgiev\Doctrine\DBAL\Types\Int4Multirange
'int4multirange[]': MartinGeorgiev\Doctrine\DBAL\Types\Int4MultirangeArray
int8multirange: MartinGeorgiev\Doctrine\DBAL\Types\Int8Multirange
'int8multirange[]': MartinGeorgiev\Doctrine\DBAL\Types\Int8MultirangeArray
nummultirange: MartinGeorgiev\Doctrine\DBAL\Types\NumMultirange
'nummultirange[]': MartinGeorgiev\Doctrine\DBAL\Types\NumMultirangeArray
tsmultirange: MartinGeorgiev\Doctrine\DBAL\Types\TsMultirange
'tsmultirange[]': MartinGeorgiev\Doctrine\DBAL\Types\TsMultirangeArray
tstzmultirange: MartinGeorgiev\Doctrine\DBAL\Types\TstzMultirange
'tstzmultirange[]': MartinGeorgiev\Doctrine\DBAL\Types\TstzMultirangeArray
# Case-insensitive text types
citext: MartinGeorgiev\Doctrine\DBAL\Types\Citext
'citext[]': MartinGeorgiev\Doctrine\DBAL\Types\CitextArray
# Text search types
tsquery: MartinGeorgiev\Doctrine\DBAL\Types\Tsquery
'tsquery[]': MartinGeorgiev\Doctrine\DBAL\Types\TsqueryArray
tsvector: MartinGeorgiev\Doctrine\DBAL\Types\Tsvector
'tsvector[]': MartinGeorgiev\Doctrine\DBAL\Types\TsvectorArray
# Monetary types
money: MartinGeorgiev\Doctrine\DBAL\Types\Money
'money[]': MartinGeorgiev\Doctrine\DBAL\Types\MoneyArray
# Key-value types
hstore: MartinGeorgiev\Doctrine\DBAL\Types\Hstore
'hstore[]': MartinGeorgiev\Doctrine\DBAL\Types\HstoreArray
# Hierarchical types
ltree: MartinGeorgiev\Doctrine\DBAL\Types\Ltree
'ltree[]': MartinGeorgiev\Doctrine\DBAL\Types\LtreeArray
# XML types
xml: MartinGeorgiev\Doctrine\DBAL\Types\Xml
'xml[]': MartinGeorgiev\Doctrine\DBAL\Types\XmlArray
# Vector types
halfvec: MartinGeorgiev\Doctrine\DBAL\Types\Halfvec
sparsevec: MartinGeorgiev\Doctrine\DBAL\Types\Sparsevec
vector: MartinGeorgiev\Doctrine\DBAL\Types\Vector
User-defined enum types: For each PostgreSQL native
ENUMtype, create a concrete class extendingMartinGeorgiev\Doctrine\DBAL\Types\Enumand register it like the examples above. See ENUM-TYPE.md for a full example.
Add mapping between DBAL and PostgreSQL data types. PostgreSQL normally prefixes array data-types with _. Note the PostgreSQL-specific naming for integers (int2, int4, int8).
# config/packages/doctrine.yaml
doctrine:
dbal:
connections:
default:
mapping_types:
# Binary type mappings
bytea: !php/const MartinGeorgiev\Doctrine\DBAL\Type::BYTEA
'bytea[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::BYTEA_ARRAY
_bytea: !php/const MartinGeorgiev\Doctrine\DBAL\Type::BYTEA_ARRAY
# Bit type mappings
bit: !php/const MartinGeorgiev\Doctrine\DBAL\Type::BIT
'bit[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::BIT_ARRAY
_bit: !php/const MartinGeorgiev\Doctrine\DBAL\Type::BIT_ARRAY
'bit varying': !php/const MartinGeorgiev\Doctrine\DBAL\Type::BIT_VARYING
varbit: !php/const MartinGeorgiev\Doctrine\DBAL\Type::BIT_VARYING
'bit varying[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::BIT_VARYING_ARRAY
_varbit: !php/const MartinGeorgiev\Doctrine\DBAL\Type::BIT_VARYING_ARRAY
# Array type mappings
'bool[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::BOOL_ARRAY
_bool: !php/const MartinGeorgiev\Doctrine\DBAL\Type::BOOL_ARRAY
'smallint[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::SMALLINT_ARRAY
_int2: !php/const MartinGeorgiev\Doctrine\DBAL\Type::SMALLINT_ARRAY
'integer[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::INTEGER_ARRAY
_int4: !php/const MartinGeorgiev\Doctrine\DBAL\Type::INTEGER_ARRAY
'bigint[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::BIGINT_ARRAY
_int8: !php/const MartinGeorgiev\Doctrine\DBAL\Type::BIGINT_ARRAY
'double precision[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::DOUBLE_PRECISION_ARRAY
_float8: !php/const MartinGeorgiev\Doctrine\DBAL\Type::DOUBLE_PRECISION_ARRAY
'real[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::REAL_ARRAY
_float4: !php/const MartinGeorgiev\Doctrine\DBAL\Type::REAL_ARRAY
'text[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::TEXT_ARRAY
_text: !php/const MartinGeorgiev\Doctrine\DBAL\Type::TEXT_ARRAY
'uuid[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::UUID_ARRAY
_uuid: !php/const MartinGeorgiev\Doctrine\DBAL\Type::UUID_ARRAY
# Case-insensitive text type mappings
citext: !php/const MartinGeorgiev\Doctrine\DBAL\Type::CITEXT
'citext[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::CITEXT_ARRAY
_citext: !php/const MartinGeorgiev\Doctrine\DBAL\Type::CITEXT_ARRAY
# Datetime array type mappings
'date[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::DATE_ARRAY
_date: !php/const MartinGeorgiev\Doctrine\DBAL\Type::DATE_ARRAY
interval: !php/const MartinGeorgiev\Doctrine\DBAL\Type::INTERVAL
'interval[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::INTERVAL_ARRAY
_interval: !php/const MartinGeorgiev\Doctrine\DBAL\Type::INTERVAL_ARRAY
'timestamp[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::TIMESTAMP_ARRAY
_timestamp: !php/const MartinGeorgiev\Doctrine\DBAL\Type::TIMESTAMP_ARRAY
'timestamptz[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::TIMESTAMPTZ_ARRAY
_timestamptz: !php/const MartinGeorgiev\Doctrine\DBAL\Type::TIMESTAMPTZ_ARRAY
timetz: !php/const MartinGeorgiev\Doctrine\DBAL\Type::TIMETZ
'timetz[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::TIMETZ_ARRAY
_timetz: !php/const MartinGeorgiev\Doctrine\DBAL\Type::TIMETZ_ARRAY
# JSON type mappings
jsonb: !php/const MartinGeorgiev\Doctrine\DBAL\Type::JSONB
'jsonb[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::JSONB_ARRAY
_jsonb: !php/const MartinGeorgiev\Doctrine\DBAL\Type::JSONB_ARRAY
# Network type mappings
cidr: !php/const MartinGeorgiev\Doctrine\DBAL\Type::CIDR
'cidr[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::CIDR_ARRAY
_cidr: !php/const MartinGeorgiev\Doctrine\DBAL\Type::CIDR_ARRAY
inet: !php/const MartinGeorgiev\Doctrine\DBAL\Type::INET
'inet[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::INET_ARRAY
_inet: !php/const MartinGeorgiev\Doctrine\DBAL\Type::INET_ARRAY
macaddr: !php/const MartinGeorgiev\Doctrine\DBAL\Type::MACADDR
'macaddr[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::MACADDR_ARRAY
_macaddr: !php/const MartinGeorgiev\Doctrine\DBAL\Type::MACADDR_ARRAY
macaddr8: !php/const MartinGeorgiev\Doctrine\DBAL\Type::MACADDR8
'macaddr8[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::MACADDR8_ARRAY
_macaddr8: !php/const MartinGeorgiev\Doctrine\DBAL\Type::MACADDR8_ARRAY
# Geometric type mappings
box: !php/const MartinGeorgiev\Doctrine\DBAL\Type::BOX
'box[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::BOX_ARRAY
_box: !php/const MartinGeorgiev\Doctrine\DBAL\Type::BOX_ARRAY
circle: !php/const MartinGeorgiev\Doctrine\DBAL\Type::CIRCLE
'circle[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::CIRCLE_ARRAY
_circle: !php/const MartinGeorgiev\Doctrine\DBAL\Type::CIRCLE_ARRAY
line: !php/const MartinGeorgiev\Doctrine\DBAL\Type::LINE
'line[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::LINE_ARRAY
_line: !php/const MartinGeorgiev\Doctrine\DBAL\Type::LINE_ARRAY
lseg: !php/const MartinGeorgiev\Doctrine\DBAL\Type::LSEG
'lseg[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::LSEG_ARRAY
_lseg: !php/const MartinGeorgiev\Doctrine\DBAL\Type::LSEG_ARRAY
path: !php/const MartinGeorgiev\Doctrine\DBAL\Type::PATH
'path[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::PATH_ARRAY
_path: !php/const MartinGeorgiev\Doctrine\DBAL\Type::PATH_ARRAY
point: !php/const MartinGeorgiev\Doctrine\DBAL\Type::POINT
'point[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::POINT_ARRAY
_point: !php/const MartinGeorgiev\Doctrine\DBAL\Type::POINT_ARRAY
polygon: !php/const MartinGeorgiev\Doctrine\DBAL\Type::POLYGON
'polygon[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::POLYGON_ARRAY
_polygon: !php/const MartinGeorgiev\Doctrine\DBAL\Type::POLYGON_ARRAY
# PostGIS spatial type mappings
geometry: !php/const MartinGeorgiev\Doctrine\DBAL\Type::GEOMETRY
'geometry[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::GEOMETRY_ARRAY
_geometry: !php/const MartinGeorgiev\Doctrine\DBAL\Type::GEOMETRY_ARRAY
geography: !php/const MartinGeorgiev\Doctrine\DBAL\Type::GEOGRAPHY
'geography[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::GEOGRAPHY_ARRAY
_geography: !php/const MartinGeorgiev\Doctrine\DBAL\Type::GEOGRAPHY_ARRAY
# Range type mappings
daterange: !php/const MartinGeorgiev\Doctrine\DBAL\Type::DATERANGE
'daterange[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::DATERANGE_ARRAY
_daterange: !php/const MartinGeorgiev\Doctrine\DBAL\Type::DATERANGE_ARRAY
int4range: !php/const MartinGeorgiev\Doctrine\DBAL\Type::INT4RANGE
'int4range[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::INT4RANGE_ARRAY
_int4range: !php/const MartinGeorgiev\Doctrine\DBAL\Type::INT4RANGE_ARRAY
int8range: !php/const MartinGeorgiev\Doctrine\DBAL\Type::INT8RANGE
'int8range[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::INT8RANGE_ARRAY
_int8range: !php/const MartinGeorgiev\Doctrine\DBAL\Type::INT8RANGE_ARRAY
numrange: !php/const MartinGeorgiev\Doctrine\DBAL\Type::NUMRANGE
'numrange[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::NUMRANGE_ARRAY
_numrange: !php/const MartinGeorgiev\Doctrine\DBAL\Type::NUMRANGE_ARRAY
tsrange: !php/const MartinGeorgiev\Doctrine\DBAL\Type::TSRANGE
'tsrange[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::TSRANGE_ARRAY
_tsrange: !php/const MartinGeorgiev\Doctrine\DBAL\Type::TSRANGE_ARRAY
tstzrange: !php/const MartinGeorgiev\Doctrine\DBAL\Type::TSTZRANGE
'tstzrange[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::TSTZRANGE_ARRAY
_tstzrange: !php/const MartinGeorgiev\Doctrine\DBAL\Type::TSTZRANGE_ARRAY
# Multirange type mappings
datemultirange: !php/const MartinGeorgiev\Doctrine\DBAL\Type::DATEMULTIRANGE
_datemultirange: !php/const MartinGeorgiev\Doctrine\DBAL\Type::DATEMULTIRANGE_ARRAY
'datemultirange[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::DATEMULTIRANGE_ARRAY
int4multirange: !php/const MartinGeorgiev\Doctrine\DBAL\Type::INT4MULTIRANGE
'int4multirange[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::INT4MULTIRANGE_ARRAY
_int4multirange: !php/const MartinGeorgiev\Doctrine\DBAL\Type::INT4MULTIRANGE_ARRAY
int8multirange: !php/const MartinGeorgiev\Doctrine\DBAL\Type::INT8MULTIRANGE
'int8multirange[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::INT8MULTIRANGE_ARRAY
_int8multirange: !php/const MartinGeorgiev\Doctrine\DBAL\Type::INT8MULTIRANGE_ARRAY
nummultirange: !php/const MartinGeorgiev\Doctrine\DBAL\Type::NUMMULTIRANGE
'nummultirange[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::NUMMULTIRANGE_ARRAY
_nummultirange: !php/const MartinGeorgiev\Doctrine\DBAL\Type::NUMMULTIRANGE_ARRAY
tsmultirange: !php/const MartinGeorgiev\Doctrine\DBAL\Type::TSMULTIRANGE
'tsmultirange[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::TSMULTIRANGE_ARRAY
_tsmultirange: !php/const MartinGeorgiev\Doctrine\DBAL\Type::TSMULTIRANGE_ARRAY
tstzmultirange: !php/const MartinGeorgiev\Doctrine\DBAL\Type::TSTZMULTIRANGE
'tstzmultirange[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::TSTZMULTIRANGE_ARRAY
_tstzmultirange: !php/const MartinGeorgiev\Doctrine\DBAL\Type::TSTZMULTIRANGE_ARRAY
# Text search type mappings
tsquery: !php/const MartinGeorgiev\Doctrine\DBAL\Type::TSQUERY
'tsquery[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::TSQUERY_ARRAY
_tsquery: !php/const MartinGeorgiev\Doctrine\DBAL\Type::TSQUERY_ARRAY
tsvector: !php/const MartinGeorgiev\Doctrine\DBAL\Type::TSVECTOR
'tsvector[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::TSVECTOR_ARRAY
_tsvector: !php/const MartinGeorgiev\Doctrine\DBAL\Type::TSVECTOR_ARRAY
# Monetary type mappings
money: !php/const MartinGeorgiev\Doctrine\DBAL\Type::MONEY
'money[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::MONEY_ARRAY
_money: !php/const MartinGeorgiev\Doctrine\DBAL\Type::MONEY_ARRAY
# Key-value type mappings
hstore: !php/const MartinGeorgiev\Doctrine\DBAL\Type::HSTORE
'hstore[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::HSTORE_ARRAY
_hstore: !php/const MartinGeorgiev\Doctrine\DBAL\Type::HSTORE_ARRAY
# Hierarchical type mappings
ltree: !php/const MartinGeorgiev\Doctrine\DBAL\Type::LTREE
'ltree[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::LTREE_ARRAY
_ltree: !php/const MartinGeorgiev\Doctrine\DBAL\Type::LTREE_ARRAY
# XML type mappings
xml: !php/const MartinGeorgiev\Doctrine\DBAL\Type::XML
'xml[]': !php/const MartinGeorgiev\Doctrine\DBAL\Type::XML_ARRAY
_xml: !php/const MartinGeorgiev\Doctrine\DBAL\Type::XML_ARRAY
# Vector type mappings
halfvec: !php/const MartinGeorgiev\Doctrine\DBAL\Type::HALFVEC
sparsevec: !php/const MartinGeorgiev\Doctrine\DBAL\Type::SPARSEVEC
vector: !php/const MartinGeorgiev\Doctrine\DBAL\Type::VECTOR
Register the functions you'll use in your DQL queries. The full set of available functions and operators can be found in the Available Functions and Operators documentation and its specialized sub-pages:
# config/packages/doctrine.yaml
doctrine:
orm:
entity_managers:
your_connection:
dql:
string_functions:
# alternative implementation of ALL() and ANY() where subquery is not required, useful for arrays...
How can I help you explore Laravel packages today?