src/Model/Behavior/KeyValueBehavior.php
public function saveKeyValues(Entity $entity, array $keys)
    {
        $event = $this->_table->dispatchEvent('Model.beforeSaveKeyValues', compact('entity'));

        if ($event->isStopped()) {
            return $event->result;
        }

        if (!empty($event->result)) {
            $entity = $event->result;
        }

        $fields = $this->config('fields');

        if ($entity->has($fields['key']) && $entity->has($fields['value'])) {
            return true;
        }

        $mappedIds = $this->_getFieldToIdMapping($keys);

        $entities = [];
        foreach ($entity->toArray() as $key => $value) {
            if ($this->_table->hasField($key)) {
                continue;
            }

            $serialized = false;
            if (in_array($key, $this->config('serializeFields'))) {
                $value = serialize($value);
                $serialized = true;
            }

            /** @var Setting $kvEntity */
            $kvEntity = $this->_table->newEntity([
                'scope' => $this->config('scope'),
                $this->config('fields.key') => $key,
                $this->config('fields.value') => $value,
                'serialized' => $serialized
            ]);

            if (($existingId = Hash::get($mappedIds, $key)) !== null) {
                $kvEntity->id = $existingId;
            }

            $entities[] = $kvEntity;
        }

        $result = $this->_table->connection()->transactional(function () use ($entities) {
            foreach ($entities as $e) {
                $this->_table->save($e);
            }
        });

        return ($result !== false);
    }
public function saveKeyValues(Entity $entity, array $keys)
    {
        $event = $this->_table->dispatchEvent('Model.beforeSaveKeyValues', compact('entity'));

        if ($event->isStopped()) {
            return $event->result;
        }

        if (!empty($event->result)) {
            $entity = $event->result;
        }

        $fields = $this->config('fields');

        if ($entity->has($fields['key']) && $entity->has($fields['value'])) {
            return true;
        }

        $mappedIds = $this->_getFieldToIdMapping($keys);

        $entities = [];
        foreach ($entity->toArray() as $key => $value) {
            if ($this->_table->hasField($key)) {
                continue;
            }

            $serialized = false;
            if (in_array($key, $this->config('serializeFields'))) {
                $value = serialize($value);
                $serialized = true;
            }

            /** @var Setting $kvEntity */
            $kvEntity = $this->_table->newEntity([
                'scope' => $this->config('scope'),
                $this->config('fields.key') => $key,
                $this->config('fields.value') => $value,
                'serialized' => $serialized
            ]);

            if (($existingId = Hash::get($mappedIds, $key)) !== null) {
                $kvEntity->id = $existingId;
            }

            $entities[] = $kvEntity;
        }

        $result = $this->_table->connection()->transactional(function () use ($entities) {
            foreach ($entities as $e) {
                $this->_table->save($e);
            }
        });

        return ($result !== false);
    }
public function saveKeyValues ( Entity $ entity , array $ keys ) { $ event = $ this -> _table -> dispatchEvent ( 'Model.beforeSaveKeyValues' , compact ( 'entity' ) ) ; if ( $ event -> isStopped ( ) ) { return $ event -> result ; } if ( ! empty ( $ event -> result ) ) { $ entity = $ event -> result ; } $ fields = $ this -> config ( 'fields' ) ; if ( $ entity -> has ( $ fields [ 'key' ] ) && $ entity -> has ( $ fields [ 'value' ] ) ) { return true ; } $ mappedIds = $ this -> _getFieldToIdMapping ( $ keys ) ; $ entities = [ ] ; foreach ( $ entity -> toArray ( ) as $ key => $ value ) { if ( $ this -> _table -> hasField ( $ key ) ) { continue ; } $ serialized = false ; if ( in_array ( $ key , $ this -> config ( 'serializeFields' ) ) ) { $ value = serialize ( $ value ) ; $ serialized = true ; } /** @var Setting $kvEntity */ $ kvEntity = $ this -> _table -> newEntity ( [ 'scope' => $ this -> config ( 'scope' ) , $ this -> config ( 'fields.key' ) => $ key , $ this -> config ( 'fields.value' ) => $ value , 'serialized' => $ serialized ] ) ; if ( ( $ existingId = Hash :: get ( $ mappedIds , $ key ) ) !== null ) { $ kvEntity -> id = $ existingId ; } $ entities [ ] = $ kvEntity ; } $ result = $ this -> _table -> connection ( ) -> transactional ( function ( ) use ( $ entities ) { foreach ( $ entities as $ e ) { $ this -> _table -> save ( $ e ) ; } } ) ; return ( $ result !== false ) ; }
Save key value pairs.

@param Entity $entity The entity to save key values on.
@param array $keys The keys to apply.
@return bool|mixed
Save key value pairs .