somework / doctrine-dbal-postgresql
支持 Doctrine DBAL & DQL 中 PostgreSQL 扩展
1.0.1
2021-12-23 08:57 UTC
Requires
- php: >=7.4
- doctrine/dbal: ~2.4 || ^3.0
- doctrine/orm: ~2.4
Requires (Dev)
- doctrine/cache: ^2.1
- phpspec/prophecy-phpunit: ^2.0
- phpunit/phpunit: ^9
- symfony/cache: ^6.0
This package is auto-updated.
Last update: 2024-09-24 21:07:05 UTC
README
此组件允许您使用 Doctrine DBAL 组件管理一些 PostgreSQL 的原生数据类型、运算符和函数。
用法
添加到 composer.json
php composer.phar require somework/doctrine-dbal-postgresql:~1.0
要使用新类型,您应该使用 自定义映射类型 功能进行注册。
要使用新函数,您应该使用 DQL 用户自定义函数 功能进行注册。
自定义类型
- 数组整数 (integer[])
- 数组大整数 (bigint[])
- TsVector (tsvector)
自定义 DQL 函数
- CONTAINS - 'OpsWay\Doctrine\ORM\Query\AST\Functions\Contains'
- CONTAINED - 'OpsWay\Doctrine\ORM\Query\AST\Functions\Contained'
- GET_JSON_FIELD - 'OpsWay\Doctrine\ORM\Query\AST\Functions\GetJsonField'
- GET_JSON_FIELD_BY_KEY - 'OpsWay\Doctrine\ORM\Query\AST\Functions\GetJsonFieldByKey'
- GET_JSON_OBJECT - 'OpsWay\Doctrine\ORM\Query\AST\Functions\GetJsonObject'
- GET_JSON_OBJECT_TEXT - 'OpsWay\Doctrine\ORM\Query\AST\Functions\GetJsonObjectText'
- ANY_OP - 'OpsWay\Doctrine\ORM\Query\AST\Functions\Any'
- ALL_OP - 'OpsWay\Doctrine\ORM\Query\AST\Functions\All'
- ARR - 'OpsWay\Doctrine\ORM\Query\AST\Functions\Arr'
- ARR_AGGREGATE - 'OpsWay\Doctrine\ORM\Query\AST\Functions\ArrayAggregate'
- ARR_APPEND - 'OpsWay\Doctrine\ORM\Query\AST\Functions\ArrayAppend'
- ARR_REPLACE - 'OpsWay\Doctrine\ORM\Query\AST\Functions\ArrayReplace'
- REGEXP_REPLACE - 'OpsWay\Doctrine\ORM\Query\AST\Functions\RegexpReplace'
- ARR_REMOVE - 'OpsWay\Doctrine\ORM\Query\AST\Functions\ArrayRemove'
- ARR_CONTAINS - 'OpsWay\Doctrine\ORM\Query\AST\Functions\ArrayContains'
- TO_TSQUERY - 'OpsWay\Doctrine\ORM\Query\AST\Functions\ToTsquery'
- TO_TSVECTOR - 'OpsWay\Doctrine\ORM\Query\AST\Functions\ToTsvector'
- TS_CONCAT_OP - 'OpsWay\Doctrine\ORM\Query\AST\Functions\TsConcat'
- TS_MATCH_OP - 'OpsWay\Doctrine\ORM\Query\AST\Functions\TsMatch'
- UNNEST - 'OpsWay\Doctrine\ORM\Query\AST\Functions\Unnest'
- JSON_AGG - 'OpsWay\Doctrine\ORM\Query\AST\Functions\JsonAgg'
- JSONB_ARRAY_ELEM_TEXT - 'OpsWay\Doctrine\ORM\Query\AST\Functions\JsonbArrayElementsText'
自定义 DQL 函数使用示例
例如,CONTAINS 函数要求您的数据库中的表列类型为 jsonb
。否则,PostgreSQL 将无法识别执行此操作所需的运算符。 (@>)
- 提示:根据您想使用的函数,检查是否有任何特定的列类型要求。
查询示例
$result = $this->em->createQuery(
'SELECT l FROM Foo\Bar\Baz l WHERE CONTAINS(l.metaData, :value) = true')
->setParameter('value', json_encode(['foo'=>'bar']))
->getResult();
设置列类型为 jsonb
。
/**
* @var array
*
* @ORM\Column(type="json", nullable=true, options={"jsonb": true})
*/
private $metaData;