goldfinch/silverstripe-jsontext

JSON存储、查询和修改。

安装: 867

依赖项: 9

建议者: 0

安全: 0

星标: 0

关注者: 0

分支: 11

开放问题: 0

类型:silverstripe-vendormodule

2.1.2 2024-01-28 21:07 UTC

This package is auto-updated.

Last update: 2024-08-28 22:27:17 UTC


README

Build Status Scrutinizer Code Quality License

提供一个完整的API,允许开发者在专门的DBField子类中写入和查询JSON。

此外,如果您的项目使用silverstripe/cms包,则所有SiteTree对象都会自动扩展,以允许在getCMSFields()中声明的多个任意UI字段,写入单个数据库字段中的JSON对象。

使用JSONPath(类似于XPath但用于JSON)和模块的广泛API,开发者可以选择性地针对特定的JSON键进行修改。

要求

SilverStripe 4

  • 使用^2.0
  • PHP >=5.6, <=7.1

SilverStripe 3

  • 使用^1.0
  • PHP >=5.4, <7.0

特性

  • 在特定于JSON的DBField子类中存储JSON "对象字符串"。
  • 通过简单的访问器查询存储的JSON:first()last()nth()或类似Postgres的操作符:->->>#>,甚至JSONPath表达式。
  • 选择性地以JSONArray或转换为SilverStripe的DBVarcharDBIntDBFloatDBBoolean对象返回查询结果。
  • 使用JSONPath表达式选择性地更新存储的JSON的部分。
  • 选择性地将一个或多个CMS输入字段转换为单个JSON存储。

简介

该模块公开了一个完整的JSON查询和更新API,允许开发人员通过JSONPathPostgres的JSON操作符(有一些差异,见下文)使用类似于XPath的查询来查询和更新JSON数据。

为什么?

在项目中,将10多个简短配置参数作为布尔值和整数存储在单独的数据库列中,这似乎很疯狂。

当您只想有一个简单的键/值存储,但又不想处理RDBMS和NOSQL数据库的冗余。

Postgres、MySQL、Oracle和MSSQL 2016都具有,或正在计划具有数据库级别的JSON字段类型。此模块填补了没有本地JSON支持的RDBMS用户之间的空白,同时在上面提供了一个方便的脚手架,以便在上面构建本地的JSON支持。

Postgres

在Postgres中,->->>操作符分别作为JSON数组或JSON对象的字符串和整数键匹配器。但是,该模块将这两种源类型视为相同,因为它们都是JSON,所以->用作整数匹配器,而->>用作字符串匹配器,无论存储的源JSON的类型如何。`#> Path Matcher操作符可以作为对象或文本匹配器,但该模块希望简化事物,因此`#>操作符只是一个简单的路径匹配器。

返回类型

无论查询类型如何,都可以通过查询上的setReturnType()方法设置所需的数据返回类型。

合法的类型是

  • JSON
  • 数组
  • SilverStripe

如果使用SilverStripe作为返回类型,则模块将自动将结果转换为SilverStripe的DBObject子类型之一

  • DBBoolean
  • DBInt
  • DBFloat
  • DBVarchar

如果查询有多个结果,输出将是一个索引数组,每个找到的结果都包含一个单值数组。

该模块还允许开发人员通过传递给重载的 setValue() 方法的 JSONPath 表达式,选择性地更新全部或部分源 JSON。

请参阅 使用文档,了解 JSONPath 和 Postgres 查询及更新的示例。

注意:此模块的查询 API 基于相对简单的 JSON 到数组转换原则。它不使用 ORM 层或以下级别的 Postgres 或 MySQL 的原生 JSON 操作符。然而,目标是为开发人员允许使用他们首选的数据库语法,为此,您可以使用 SS 配置将模块设置为 mysqlpostgres 模式,请参阅 配置文档

安装

#> composer require phptek/jsontext

配置

请参阅:配置文档

使用

请参阅:使用文档

贡献

如果您已经使用了一段时间的 Postgres 或 MySQL 及其 JSON 函数,我非常希望听到您的意见。一些简单的失败测试将非常受欢迎。

请参阅:CONTRIBUTING.md

报告问题

请包括所有细节,无论大小。如果它是您的模块,您需要从错误/功能请求中了解哪些信息? :-)

致谢

作者

Russell Michell 2016-2018 russ@theruss.com

待办事项

  • 将缺少的 prepValueForDB() 添加到 JSONText 类。
  • 请参阅 GitHub 上的官方问题列表。

支持我

如果您喜欢您所看到的,请支持我!我接受比特币。