Source of file DBJson.php
Size: 1,745 Bytes - Last Modified: 2021-12-23T10:32:46+00:00
/var/www/docs.ssmods.com/process/src/src/ORM/DBJson.php
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 | <?php namespace SilverStripe\Link\ORM; use SilverStripe\Core\Config\Config; use SilverStripe\ORM\DB; use SilverStripe\ORM\FieldType\DBField; /** * Represents a DBField storing a JSON string */ class DBJson extends DBField { public function __construct($name = null, $defaultVal = []) { $this->defaultVal = is_array($defaultVal) ? $defaultVal : []; parent::__construct($name); } public function requireField() { $charset = Config::inst()->get('SilverStripe\ORM\Connect\MySQLDatabase', 'charset'); $collation = Config::inst()->get('SilverStripe\ORM\Connect\MySQLDatabase', 'collation'); $parts = [ 'datatype' => 'mediumtext', 'character set' => $charset, 'collate' => $collation, 'arrayValue' => $this->arrayValue ]; $values = [ 'type' => 'text', 'parts' => $parts ]; DB::require_field($this->tableName, $this->name, $values); } public function nullValue() { return null; } public function setValue($value, $record = null, $markChanged = true) { if (empty($value)) { $value = null; } if (is_string($value)) { $value = json_decode($value, true); } elseif ($value instanceof JsonData) { $value = $value->jsonSerialize(); } return parent::setValue($value, $record, $markChanged); } public function prepValueForDB($value) { if (is_array($value) || $value instanceof JsonData) { $value = json_encode($value); } return $value; } public function scalarValueOnly() { return false; } } |