Eloquent\Dialect\Json::mutateAttribute PHP Метод

mutateAttribute() защищенный Метод

Check if the key is a known json attribute and return that value.
protected mutateAttribute ( string $key, mixed $value ) : mixed
$key string
$value mixed
Результат mixed
    protected function mutateAttribute($key, $value)
    {
        $jsonPattern = '/' . implode('|', self::$jsonOperators) . '/';
        // Test for JSON operators and reduce to end element
        $containsJsonOperator = false;
        if (preg_match($jsonPattern, $key)) {
            $elems = preg_split($jsonPattern, $key);
            $key = end($elems);
            $key = str_replace(['>', "'"], '', $key);
            $containsJsonOperator = true;
        }
        if (!parent::hasGetMutator($key) && array_key_exists($key, $this->jsonAttributes) != false) {
            // Get the content of the column associated with this JSON
            // attribute and parse it into an object
            $value = $this->{$this->jsonAttributes[$key]};
            $obj = json_decode($this->{$this->jsonAttributes[$key]});
            // Make sure we were able to parse the json. It's possible here
            // that we've only hinted at an attribute and the column that will
            // hold that attribute is actually null. This isn't really a parse
            // error though the json_encode method will return null (just like)
            // a parse error. To distinguish the two states see if the original
            // value was null (indicating there was nothing there to parse in
            // the first place)
            if (!($value === 'null' || $value === null) && $obj === null) {
                throw new InvalidJsonException();
            }
            // Again it's possible the key will be in the jsonAttributes array
            // (having been hinted) but not present on the actual record.
            // Therefore test that the key is set before returning.
            if (isset($obj->{$key})) {
                return $obj->{$key};
            } else {
                return;
            }
        } elseif ($containsJsonOperator) {
            return;
        }
        return parent::mutateAttribute($key, $value);
    }