somework/doctrine-dbal-postgresql

支持 Doctrine DBAL & DQL 中 PostgreSQL 扩展

1.0.1 2021-12-23 08:57 UTC

README

Latest Stable Version Total Downloads Latest Unstable Version License PHP Version Require
此组件允许您使用 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;