Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Postgresql For Doctrine Laravel Package

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+.

View on GitHub
Deep Wiki
Context7

Integration with Doctrine

This guide covers integration with Doctrine DBAL 3.x/4.x and ORM 2.14+/3.x. For older versions, please refer to previous documentation versions.

Register DBAL Types

Register the DBAL types you plan to use. The full set of available types can be found in AVAILABLE-TYPES.md.

<?php

use Doctrine\DBAL\Types\Type;

// Binary types
Type::addType('bytea', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Bytea");
Type::addType('bytea[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\ByteaArray");

// Bit types
Type::addType('bit', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Bit");
Type::addType('bit[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\BitArray");
Type::addType('bit varying', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\BitVarying");
Type::addType('bit varying[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\BitVaryingArray");

// Array types
Type::addType('bool[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\BooleanArray");
Type::addType('smallint[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\SmallIntArray");
Type::addType('integer[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\IntegerArray");
Type::addType('bigint[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\BigIntArray");
Type::addType('double precision[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\DoublePrecisionArray");
Type::addType('real[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\RealArray");
Type::addType('text[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\TextArray");
Type::addType('uuid[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\UuidArray");

// Case-insensitive text types
Type::addType('citext', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Citext");
Type::addType('citext[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\CitextArray");

// Date and time types
Type::addType('date[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\DateArray");
Type::addType('interval', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Interval");
Type::addType('interval[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\IntervalArray");
Type::addType('timestamp[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\TimestampArray");
Type::addType('timestamptz[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\TimestampTzArray");
Type::addType('timetz', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Timetz");
Type::addType('timetz[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\TimetzArray");

// JSON types
Type::addType('jsonb', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Jsonb");
Type::addType('jsonb[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\JsonbArray");

// Network types
Type::addType('cidr', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Cidr");
Type::addType('cidr[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\CidrArray");
Type::addType('inet', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Inet");
Type::addType('inet[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\InetArray");
Type::addType('macaddr', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Macaddr");
Type::addType('macaddr[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\MacaddrArray");
Type::addType('macaddr8', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Macaddr8");
Type::addType('macaddr8[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Macaddr8Array");

// Geometric types
Type::addType('box', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Box");
Type::addType('box[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\BoxArray");
Type::addType('circle', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Circle");
Type::addType('circle[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\CircleArray");
Type::addType('line', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Line");
Type::addType('line[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\LineArray");
Type::addType('lseg', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Lseg");
Type::addType('lseg[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\LsegArray");
Type::addType('path', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Path");
Type::addType('path[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\PathArray");
Type::addType('point', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Point");
Type::addType('point[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\PointArray");
Type::addType('polygon', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Polygon");
Type::addType('polygon[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\PolygonArray");

// PostGIS spatial types
Type::addType('geometry', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Geometry");
Type::addType('geometry[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\GeometryArray");
Type::addType('geography', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Geography");
Type::addType('geography[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\GeographyArray");

// Range types
Type::addType('daterange', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\DateRange");
Type::addType('daterange[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\DateRangeArray");
Type::addType('int4range', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Int4Range");
Type::addType('int4range[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Int4RangeArray");
Type::addType('int8range', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Int8Range");
Type::addType('int8range[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Int8RangeArray");
Type::addType('numrange', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\NumRange");
Type::addType('numrange[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\NumRangeArray");
Type::addType('tsrange', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\TsRange");
Type::addType('tsrange[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\TsRangeArray");
Type::addType('tstzrange', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\TstzRange");
Type::addType('tstzrange[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\TstzRangeArray");

// Multirange types
Type::addType('datemultirange', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\DateMultirange");
Type::addType('datemultirange[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\DateMultirangeArray");
Type::addType('int4multirange', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Int4Multirange");
Type::addType('int4multirange[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Int4MultirangeArray");
Type::addType('int8multirange', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Int8Multirange");
Type::addType('int8multirange[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Int8MultirangeArray");
Type::addType('nummultirange', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\NumMultirange");
Type::addType('nummultirange[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\NumMultirangeArray");
Type::addType('tsmultirange', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\TsMultirange");
Type::addType('tsmultirange[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\TsMultirangeArray");
Type::addType('tstzmultirange', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\TstzMultirange");
Type::addType('tstzmultirange[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\TstzMultirangeArray");

// Text search types
Type::addType('tsquery', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Tsquery");
Type::addType('tsquery[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\TsqueryArray");
Type::addType('tsvector', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Tsvector");
Type::addType('tsvector[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\TsvectorArray");

// Monetary types
Type::addType('money', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Money");
Type::addType('money[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\MoneyArray");

// Key-value types
Type::addType('hstore', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Hstore");
Type::addType('hstore[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\HstoreArray");

// Hierarchical types
Type::addType('ltree', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Ltree");
Type::addType('ltree[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\LtreeArray");

// XML types
Type::addType('xml', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Xml");
Type::addType('xml[]', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\XmlArray");

// Vector types
Type::addType('halfvec', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Halfvec");
Type::addType('sparsevec', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Sparsevec");
Type::addType('vector', "MartinGeorgiev\\Doctrine\\DBAL\\Types\\Vector");

Register DQL Functions

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:

<?php

use Doctrine\DBAL\DriverManager;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\ORMSetup;

$configuration = ORMSetup::createAttributeMetadataConfiguration(
    paths: [__DIR__ . '/src'],
    isDevMode: true,
);

# alternative implementation of ALL() and ANY() where subquery is not required, useful for arrays
$configuration->addCustomStringFunction('ALL_OF', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\All::class);
$configuration->addCustomStringFunction('ANY_OF', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Any::class);

# operators for working with array and json(b) data
$configuration->addCustomStringFunction('GREATEST', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Greatest::class);
$configuration->addCustomStringFunction('LEAST', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Least::class);
$configuration->addCustomStringFunction('CONTAINS', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Contains::class); # @>
$configuration->addCustomStringFunction('IS_CONTAINED_BY', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\IsContainedBy::class); # <@
$configuration->addCustomStringFunction('OVERLAPS', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Overlaps::class); # &&
$configuration->addCustomStringFunction('RIGHT_EXISTS_ON_LEFT', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\TheRightExistsOnTheLeft::class); # ?
$configuration->addCustomStringFunction('ALL_ON_RIGHT_EXIST_ON_LEFT', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\AllOnTheRightExistOnTheLeft::class); # ?&
$configuration->addCustomStringFunction('ANY_ON_RIGHT_EXISTS_ON_LEFT', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\AnyOnTheRightExistsOnTheLeft::class); # ?|
$configuration->addCustomStringFunction('RETURNS_VALUE_FOR_JSON_VALUE', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ReturnsValueForJsonValue::class); # @?
$configuration->addCustomStringFunction('DELETE_AT_PATH', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\DeleteAtPath::class); # #-

# array and string specific functions
$configuration->addCustomStringFunction('IN_ARRAY', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\InArray::class);
$configuration->addCustomStringFunction('ANY_VALUE', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\AnyValue::class);
$configuration->addCustomStringFunction('ARRAY', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Arr::class);
$configuration->addCustomStringFunction('ARRAY_APPEND', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayAppend::class);
$configuration->addCustomStringFunction('ARRAY_CARDINALITY', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayCardinality::class);
$configuration->addCustomStringFunction('ARRAY_CAT', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayCat::class);
$configuration->addCustomStringFunction('ARRAY_DIMENSIONS', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayDimensions::class);
$configuration->addCustomStringFunction('ARRAY_FILL', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayFill::class);
$configuration->addCustomStringFunction('ARRAY_LENGTH', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayLength::class);
$configuration->addCustomStringFunction('ARRAY_LOWER', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayLower::class);
$configuration->addCustomStringFunction('ARRAY_NUMBER_OF_DIMENSIONS', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayNumberOfDimensions::class);
$configuration->addCustomStringFunction('ARRAY_POSITION', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayPosition::class);
$configuration->addCustomStringFunction('ARRAY_POSITIONS', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayPositions::class);
$configuration->addCustomStringFunction('ARRAY_PREPEND', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayPrepend::class);
$configuration->addCustomStringFunction('ARRAY_REMOVE', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayRemove::class);
$configuration->addCustomStringFunction('ARRAY_REPLACE', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayReplace::class);
$configuration->addCustomStringFunction('ARRAY_SAMPLE', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArraySample::class);
$configuration->addCustomStringFunction('ARRAY_SHUFFLE', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayShuffle::class);
$configuration->addCustomStringFunction('ARRAY_TO_JSON', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayToJson::class);
$configuration->addCustomStringFunction('ARRAY_TO_STRING', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayToString::class);
$configuration->addCustomStringFunction('ARRAY_UPPER', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayUpper::class);
$configuration->addCustomStringFunction('ASCII', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Ascii::class);
$configuration->addCustomStringFunction('BTRIM', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Btrim::class);
$configuration->addCustomStringFunction('CHAR_LENGTH', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\CharLength::class);
$configuration->addCustomStringFunction('CHR', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Chr::class);
$configuration->addCustomStringFunction('DECODE', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Decode::class);
$configuration->addCustomStringFunction('ENCODE', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Encode::class);
$configuration->addCustomStringFunction('INITCAP', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Initcap::class);
$configuration->addCustomStringFunction('LPAD', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Lpad::class);
$configuration->addCustomStringFunction('LTRIM', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Ltrim::class);
$configuration->addCustomStringFunction('OCTET_LENGTH', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\OctetLength::class);
$configuration->addCustomStringFunction('QUOTE_IDENT', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\QuoteIdent::class);
$configuration->addCustomStringFunction('QUOTE_LITERAL', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\QuoteLiteral::class);
$configuration->addCustomStringFunction('QUOTE_NULLABLE', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\QuoteNullable::class);
$configuration->addCustomStringFunction('RPAD', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Rpad::class);
$configuration->addCustomStringFunction('RTRIM', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Rtrim::class);
$configuration->addCustomStringFunction('SPLIT_PART', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\SplitPart::class);
$configuration->addCustomStringFunction('STARTS_WITH', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\StartsWith::class);
$configuration->addCustomStringFunction('STRPOS', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Strpos::class);
$configuration->addCustomStringFunction('STRING_TO_ARRAY', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\StringToArray::class);
$configuration->addCustomStringFunction('ROW', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Row::class);
$configuration->addCustomStringFunction('TRANSLATE', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Translate::class);
$configuration->addCustomStringFunction('UNNEST', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Unnest::class);

# json specific functions
$configuration->addCustomStringFunction('JSON_ARRAY_LENGTH', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonArrayLength::class);
$configuration->addCustomStringFunction('JSON_BUILD_ARRAY', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonBuildArray::class);
$configuration->addCustomStringFunction('JSON_BUILD_OBJECT', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonBuildObject::class);
$configuration->addCustomStringFunction('JSON_EACH', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonEach::class);
$configuration->addCustomStringFunction('JSON_EACH_TEXT', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonEachText::class);
$configuration->addCustomStringFunction('JSON_EXISTS', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonExists::class);
$configuration->addCustomStringFunction('JSON_GET_FIELD', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonGetField::class);
$configuration->addCustomStringFunction('JSON_GET_FIELD_AS_INTEGER', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonGetFieldAsInteger::class);
$configuration->addCustomStringFunction('JSON_GET_FIELD_AS_TEXT', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonGetFieldAsText::class);
$configuration->addCustomStringFunction('JSON_GET_OBJECT', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonGetObject::class);
$configuration->addCustomStringFunction('JSON_GET_OBJECT_AS_TEXT', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonGetObjectAsText::class);
$configuration->addCustomStringFunction('JSON_OBJECT_KEYS', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonObjectKeys::class);
$configuration->addCustomStringFunction('JSON_QUERY', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonQuery::class);
$configuration->addCustomStringFunction('JSON_SCALAR', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonScalar::class);
$configuration->addCustomStringFunction('JSON_SERIALIZE', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonSerialize::class);
$configuration->addCustomStringFunction('JSON_STRIP_NULLS', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonStripNulls::class);
$configuration->addCustomStringFunction('JSON_TYPEOF', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonTypeof::class);
$configuration->addCustomStringFunction('JSON_VALUE', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonValue::class);
$configuration->addCustomStringFunction('TO_JSON', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ToJson::class);
$configuration->addCustomStringFunction('ROW_TO_JSON', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\RowToJson::class);

# jsonb specific functions
$configuration->addCustomStringFunction('JSONB_ARRAY_ELEMENTS', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbArrayElements::class);
$configuration->addCustomStringFunction('JSONB_ARRAY_ELEMENTS_TEXT', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbArrayElementsText::class);
$configuration->addCustomStringFunction('JSONB_ARRAY_LENGTH', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbArrayLength::class);
$configuration->addCustomStringFunction('JSONB_BUILD_ARRAY', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbBuildArray::class);
$configuration->addCustomStringFunction('JSONB_BUILD_OBJECT', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbBuildObject::class);
$configuration->addCustomStringFunction('JSONB_EACH', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbEach::class);
$configuration->addCustomStringFunction('JSONB_EACH_TEXT', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbEachText::class);
$configuration->addCustomStringFunction('JSONB_EXISTS', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbExists::class);
$configuration->addCustomStringFunction('JSONB_INSERT', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbInsert::class);
$configuration->addCustomStringFunction('JSONB_OBJECT_KEYS', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbObjectKeys::class);
$configuration->addCustomStringFunction('JSONB_PATH_EXISTS', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbPathExists::class);
$configuration->addCustomStringFunction('JSONB_PATH_MATCH', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbPathMatch::class);
$configuration->addCustomStringFunction('JSONB_PATH_QUERY', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbPathQuery::class);
$configuration->addCustomStringFunction('JSONB_PATH_QUERY_ARRAY', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbPathQueryArray::class);
$configuration->addCustomStringFunction('JSONB_PATH_QUERY_FIRST', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbPathQueryFirst::class);
$configuration->addCustomStringFunction('JSONB_PRETTY', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbPretty::class);
$configuration->addCustomStringFunction('JSONB_SET', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbSet::class);
$configuration->addCustomStringFunction('JSONB_SET_LAX', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbSetLax::class);
$configuration->addCustomStringFunction('JSONB_STRIP_NULLS', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbStripNulls::class);
$configuration->addCustomStringFunction('TO_JSONB', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ToJsonb::class);

# text search specific
$configuration->addCustomStringFunction('ARRAY_TO_TSVECTOR', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayToTsvector::class);
$configuration->addCustomStringFunction('JSON_TO_TSVECTOR', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonToTsvector::class);
$configuration->addCustomStringFunction('PHRASETO_TSQUERY', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\PhrasetoTsquery::class);
$configuration->addCustomStringFunction('PLAINTO_TSQUERY', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\PlaintoTsquery::class);
$configuration->addCustomStringFunction('SETWEIGHT', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Setweight::class);
$configuration->addCustomStringFunction('STRIP', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Strip::class);
$configuration->addCustomStringFunction('TO_TSQUERY', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ToTsquery::clas...
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
bugban/symfony
beyonder-capi/workflow-extensions-bundle
beyonder-capi/job-queue-bundle
capell-app/block-library
axium/identity
cetria/laravel-dummy-models
cetria/reflection-helper
agropredict/sso-auth-bundle
evolvestudio/spam-protection
datacore/hub-sdk
develia/commons
cuci/prototurk-sdk
cuci/prototurk-sdk-symfony
develia/geo-bundle
dreamzy/livewire-charts
touchestate-sdk/php-sdk
22h/doctrine-garbage-collection-bundle
agtp/agtp-php
agtp/mod-php
splash/sonata-admin