Пример #1
0
 /**
  * @param \Enjoin\Record\Record $Record
  * @param array|null $params
  * @param int $flags
  * @return \Enjoin\Record\Record
  */
 public static function save(Record $Record, array $params = null, $flags = 0)
 {
     $scope = $Record->scope();
     $Model = Enjoin::get($scope->modelName);
     if ($Model->isTimestamps()) {
         $createdAtField = $Model->getCreatedAtField();
         if ($scope->type === self::NON_PERSISTENT || $scope->type === self::PERSISTENT && !isset($Record->{$createdAtField})) {
             $Record->{$createdAtField} = Carbon::now();
         }
         $updatedAtField = $Model->getUpdatedAtField();
         $Record->{$updatedAtField} = Carbon::now();
     }
     $defAttributes = $Model->getDefinition()->getAttributes();
     $pick = isset($params['fields']) ? $params['fields'] : null;
     $volume = [];
     $validate = [];
     $record = $Record->__toArray();
     $Setters = Factory::getSetters();
     foreach ($Record as $field => $recordVal) {
         if ($recordVal instanceof Record) {
             # We can start recursive saving here...
             #$recordVal->save();
         } elseif (array_key_exists($field, $defAttributes)) {
             $saveVal = $Setters->perform($Model, $record, $defAttributes[$field], $field);
             if (isset($defAttributes[$field]['validate'])) {
                 $validate[] = [$field, $saveVal, $defAttributes[$field]['validate']];
             }
             if (!$pick || in_array($field, $pick)) {
                 $volume[$field] = $saveVal;
             }
         } elseif ($Model->isTimestamps() && $field === $createdAtField) {
             if (!$pick || in_array($field, $pick)) {
                 $volume[$field] = $Setters->getCreatedAt($Model, $recordVal);
             }
         } elseif ($Model->isTimestamps() && $field === $updatedAtField) {
             $volume[$field] = $Setters->getUpdatedAt($Model, $recordVal);
         }
     }
     !$validate ?: $Setters->validate($validate);
     if (!($flags & self::SOFT_SAVE)) {
         //            $id = $this->saveEntry($volume);
         $id = $scope->type === self::NON_PERSISTENT ? static::saveNonPersistent($Record, $volume) : static::savePersistent($Record, $volume);
         $scope->id = $id;
         $Record->id = $id;
     }
     return $Record;
 }