Cake\ORM\Table::_processSave PHP Method

_processSave() protected method

Performs the actual saving of an entity based on the passed options.
protected _processSave ( Cake\Datasource\EntityInterface $entity, ArrayObject $options ) : Cake\Datasource\EntityInterface | boolean
$entity Cake\Datasource\EntityInterface the entity to be saved
$options ArrayObject the options to use for the save operation
return Cake\Datasource\EntityInterface | boolean
    protected function _processSave($entity, $options)
    {
        $primaryColumns = (array) $this->primaryKey();
        if ($options['checkExisting'] && $primaryColumns && $entity->isNew() && $entity->has($primaryColumns)) {
            $alias = $this->alias();
            $conditions = [];
            foreach ($entity->extract($primaryColumns) as $k => $v) {
                $conditions["{$alias}.{$k}"] = $v;
            }
            $entity->isNew(!$this->exists($conditions));
        }
        $mode = $entity->isNew() ? RulesChecker::CREATE : RulesChecker::UPDATE;
        if ($options['checkRules'] && !$this->checkRules($entity, $mode, $options)) {
            return false;
        }
        $options['associated'] = $this->_associations->normalizeKeys($options['associated']);
        $event = $this->dispatchEvent('Model.beforeSave', compact('entity', 'options'));
        if ($event->isStopped()) {
            return $event->result;
        }
        $saved = $this->_associations->saveParents($this, $entity, $options['associated'], ['_primary' => false] + $options->getArrayCopy());
        if (!$saved && $options['atomic']) {
            return false;
        }
        $data = $entity->extract($this->schema()->columns(), true);
        $isNew = $entity->isNew();
        if ($isNew) {
            $success = $this->_insert($entity, $data);
        } else {
            $success = $this->_update($entity, $data);
        }
        if ($success) {
            $success = $this->_onSaveSuccess($entity, $options);
        }
        if (!$success && $isNew) {
            $entity->unsetProperty($this->primaryKey());
            $entity->isNew(true);
        }
        return $success ? $entity : false;
    }