Download the PHP package archipro/silverstripe-db-json without Composer
On this page you can find all versions of the php package archipro/silverstripe-db-json. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download archipro/silverstripe-db-json
More information about archipro/silverstripe-db-json
Files in archipro/silverstripe-db-json
Package silverstripe-db-json
Short Description A Silverstripe CMS module to enable the creation of MySQL 8 JSON column on DataObjects
License BSD-3-Clause
Informations about the package silverstripe-db-json
Silverstripe CMS Json DBField
MySQL 8 introduced support for native JSON fields. This module adds support for creating and using those fields in Silverstripe CMS.
Installation
Usage
Simply reference the DBJson
class in your DataObject's $db
array. This will automatically add a json
field to the database table.
This will create a table with this definition:
Accessing JSON fields
The module automatically adds accessor and mutator methods for all DBJSON fields.
This allows you to assign array values to your JSON fields. Those values will automatically be encoded as a JSON string on the DataObject's record.
When you read the value back from the DataObject, the JSON string is decoded back into an array.
Filtering results
This module ships with a Json
filter you can use search your JSON column. Internally the filter will use the JSON_CONTAINS
function.
You can also use the not
modifier to exclude results.
MySQL 8 provides many native functions to query JSON data. You can use the where
method if you want to use those functions directly.
Gotchas
Your are using a custom MySQLSchemaManager
Your MySQLSchemaManager must have a json
method so it it knows how to create json
columns.
This extension will automatically replace the native MySQLSchemaManager with its own MySQL8SchemaManager
.
If you've already defined a custom MySQLSchemaManager
:
- add the
ArchiPro\Silverstripe\DbJson\JsonDatabaseFieldDefinition
trait to your class. - Make sure your custom
MySQLSchemaManager
is loaded after the one provided by this extension.
---
Name: my-custom-db-schema-manager
after:
name: '#maxime-rainville-silverstripe-db-json'
---
SilverStripe\Core\Injector\Injector:
MySQLSchemaManager:
class: App\Project\MyCustomMySQLSchemaManager