goldfinch / silverstripe-jsontext
JSON存储、查询和修改。
Requires
- php: >=5.6.0
- peekmo/jsonpath: dev-master
- silverstripe/framework: ^4.0 || ^5.0
Requires (Dev)
- phpunit/phpunit: ^5.7 || ^9.5
Suggests
- silverstripe/cms: Use silverstripe/cms package if you want to write to JSON-backed DB fields via the CMS module's UI
This package is auto-updated.
Last update: 2024-08-28 22:27:17 UTC
README
- SS5兼容的phptek/silverstripe-jsontext分支
提供一个完整的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表达式。 - 选择性地以
JSON
、Array
或转换为SilverStripe的DBVarchar
、DBInt
、DBFloat
或DBBoolean
对象返回查询结果。 - 使用JSONPath表达式选择性地更新存储的JSON的部分。
- 选择性地将一个或多个CMS输入字段转换为单个JSON存储。
简介
该模块公开了一个完整的JSON查询和更新API,允许开发人员通过JSONPath或Postgres的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 配置将模块设置为 mysql
或 postgres
模式,请参阅 配置文档。
安装
#> composer require phptek/jsontext
配置
请参阅:配置文档。
使用
请参阅:使用文档。
贡献
如果您已经使用了一段时间的 Postgres 或 MySQL 及其 JSON 函数,我非常希望听到您的意见。一些简单的失败测试将非常受欢迎。
请参阅:CONTRIBUTING.md。
报告问题
请包括所有细节,无论大小。如果它是您的模块,您需要从错误/功能请求中了解哪些信息? :-)
致谢
- Axel Anceau 因其打包了由 Stefan Goessner 实现的相当惊人的 JSONPath。
- Stefan Goessner 自 2005 年以来对 JSONPath 的原始工作!
作者
Russell Michell 2016-2018 russ@theruss.com
待办事项
- 将缺少的
prepValueForDB()
添加到JSONText
类。 - 请参阅 GitHub 上的官方问题列表。
支持我
如果您喜欢您所看到的,请支持我!我接受比特币。