final public function create($record = null, string $alias = null): Record
    {
        $record = Record::parse($record);

        foreach ($this->getParents() as $relationship => $parent) {
            /** @var DataMapper $parent */
            $create = $parent->create($record);
            $record->set($relationship, $create->get($parent->getPrimaryKey()));
            $record->import($create->all());
        }

        $action = coalesce($alias, Action::CREATE);

        if (!$this->before($action, $record)) {
            throw new SimplesHookError(get_class($this), $action, 'before');
        }
        if (!$record->get($this->hashKey)) {
            $record->set($this->hashKey, $this->hashKey());
        }

        $create = $this->configureRecord(Action::CREATE, $record);
        $fields = $create->keys();
        $values = $create->values();

        foreach ($this->createKeys as $type => $timestampsKey) {
            $fields[] = $timestampsKey;
            $values[] = $this->getTimestampValue($type);
        }

        $created = $this
            ->source($this->getCollection())
            ->fields($fields)
            ->register($values);

        $this->reset();

        if ($this->getPrimaryKey()) {
            $record->set($this->getPrimaryKey(), $created);
        }
        $record->merge($create->all());

        if (!$this->after($action, $record)) {
            throw new SimplesHookError(get_class($this), $action, 'after');
        }
        return $record;
    }
final public function create($record = null, string $alias = null): Record
    {
        $record = Record::parse($record);

        foreach ($this->getParents() as $relationship => $parent) {
            /** @var DataMapper $parent */
            $create = $parent->create($record);
            $record->set($relationship, $create->get($parent->getPrimaryKey()));
            $record->import($create->all());
        }

        $action = coalesce($alias, Action::CREATE);

        if (!$this->before($action, $record)) {
            throw new SimplesHookError(get_class($this), $action, 'before');
        }
        if (!$record->get($this->hashKey)) {
            $record->set($this->hashKey, $this->hashKey());
        }

        $create = $this->configureRecord(Action::CREATE, $record);
        $fields = $create->keys();
        $values = $create->values();

        foreach ($this->createKeys as $type => $timestampsKey) {
            $fields[] = $timestampsKey;
            $values[] = $this->getTimestampValue($type);
        }

        $created = $this
            ->source($this->getCollection())
            ->fields($fields)
            ->register($values);

        $this->reset();

        if ($this->getPrimaryKey()) {
            $record->set($this->getPrimaryKey(), $created);
        }
        $record->merge($create->all());

        if (!$this->after($action, $record)) {
            throw new SimplesHookError(get_class($this), $action, 'after');
        }
        return $record;
    }
final public function create ( $ record = null , string $ alias = null ) : Record { $ record = Record :: parse ( $ record ) ; foreach ( $ this -> getParents ( ) as $ relationship => $ parent ) { /** @var DataMapper $parent */ $ create = $ parent -> create ( $ record ) ; $ record -> set ( $ relationship , $ create -> get ( $ parent -> getPrimaryKey ( ) ) ) ; $ record -> import ( $ create -> all ( ) ) ; } $ action = coalesce ( $ alias , Action :: CREATE ) ; if ( ! $ this -> before ( $ action , $ record ) ) { throw new SimplesHookError ( get_class ( $ this ) , $ action , 'before' ) ; } if ( ! $ record -> get ( $ this -> hashKey ) ) { $ record -> set ( $ this -> hashKey , $ this -> hashKey ( ) ) ; } $ create = $ this -> configureRecord ( Action :: CREATE , $ record ) ; $ fields = $ create -> keys ( ) ; $ values = $ create -> values ( ) ; foreach ( $ this -> createKeys as $ type => $ timestampsKey ) { $ fields [ ] = $ timestampsKey ; $ values [ ] = $ this -> getTimestampValue ( $ type ) ; } $ created = $ this -> source ( $ this -> getCollection ( ) ) -> fields ( $ fields ) -> register ( $ values ) ; $ this -> reset ( ) ; if ( $ this -> getPrimaryKey ( ) ) { $ record -> set ( $ this -> getPrimaryKey ( ) , $ created ) ; } $ record -> merge ( $ create -> all ( ) ) ; if ( ! $ this -> after ( $ action , $ record ) ) { throw new SimplesHookError ( get_class ( $ this ) , $ action , 'after' ) ; } return $ record ; }
Method with the responsibility of create a record of model
@param array|Record $record (null)
@param string $alias ('create')
@return Record
@throws SimplesHookError
@throws SimplesRecordReadonlyError
@throws SimplesRunTimeError
Method with the responsibility of create a record of model