opsway / doctrine-dbal-postgresql
支持 Doctrine DBAL & DQL 的 Postgres 扩展
v2.0.0
2024-02-20 12:08 UTC
Requires
- php: ^8.1
- doctrine/dbal: ^4.0
- doctrine/orm: ^3.0
Requires (Dev)
- ext-pdo_sqlite: *
- lctrs/psalm-psr-container-plugin: ^1.6
- opsway/psr12-strict-coding-standard: ^1.1
- phpspec/prophecy-phpunit: ^2.0
- phpunit/phpunit: ^9.5
- psalm/plugin-phpunit: ^0.18
- symfony/cache: ^4.4 || ^5.4 || ^6.0
- vimeo/psalm: ^5.0
- weirdan/doctrine-psalm-plugin: ^2.0
- dev-master / 3.0.x-dev
- v2.0.0
- v1.2.0
- v1.1.0
- dev-develop / 1.0.x-dev
- v1.0.0
- 1.0.0-rc1
- v0.8.1
- v0.8.0
- v0.7.4
- v0.7.3
- v0.7.2
- v0.7.1
- v0.7.0
- v0.6.3
- v0.6.2
- v0.6.1
- v0.6.0
- v0.5.1
- v0.5.0
- v0.4.1
- v0.4.0
- v0.3.0
- v0.2.0
- v0.1.2
- v0.1.1
- dev-add-infection
- dev-improve-require-versions
- dev-improve-tests
- dev-add_regexp_replace
This package is auto-updated.
Last update: 2024-09-20 13:18:33 UTC
README
此组件允许您使用 Doctrine DBAL 组件管理一些本地的 PostgreSQL 数据类型、运算符和函数。
使用方法
添加到 composer.json
php composer.phar require opsway/doctrine-dbal-postgresql ~0.8
要使用新类型,您应使用 自定义映射类型 功能进行注册。
要使用新函数,您应使用 DQL 用户自定义函数 功能进行注册。
自定义类型
- 数组整数 (integer[])
- 数组大整数 (bigint[])
- 文本搜索向量 (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;
注意:如果您想在现有的 json
字段上使用这些 DQL 函数,您必须更改其列类型(添加 options={"jsonb": true}
后运行 make:migration
不足以完成此操作)。以下迁移示例展示了您如何操作:
<?php declare(strict_types=1); namespace DoctrineMigrations; use Doctrine\DBAL\Schema\Schema; use Doctrine\Migrations\AbstractMigration; final class VersionXXX extends AbstractMigration { public function up(Schema $schema): void { $this->addSql('ALTER TABLE "user" ALTER COLUMN roles SET DATA TYPE jsonb'); } public function down(Schema $schema): void { $this->addSql('ALTER TABLE "user" ALTER COLUMN roles SET DATA TYPE json'); } }