protected function save(Migration $migration) { $query = new Query(); $query->insert()->table(self::TABLE_NAME)->values(['time' => ':time'])->params([':time' => $migration->getTimestamp()]); $this->app->db->default->execute($query); }
/** * TODO: много лишних isset, которые всегда true по определению * Сохранение полей модели без учета связей, требующих ID модели * @param Model $model * @return Model */ protected function saveColumns(Model $model) { /** @var \T4\Orm\Model $class */ $class = get_class($model); $columns = $class::getColumns(); $relations = $class::getRelations(); $cols = []; $sets = []; $data = []; foreach ($columns as $column => $def) { if (isset($model->{$column}) && null === $model->{$column} && isset($def['default'])) { $sets[$column] = ':' . $column; $data[':' . $column] = $def['default']; } else { $cols[] = $column; $sets[$column] = ':' . $column; $data[':' . $column] = $model->{$column}; } } foreach ($relations as $rel => $def) { switch ($def['type']) { case $class::BELONGS_TO: $column = $class::getRelationLinkName($def); if (!in_array($column, $cols)) { // todo: test this! //if (isset($model->{$column}) && !is_null($model->{$column})) { if (isset($model->{$column})) { $sets[$column] = ':' . $column; $data[':' . $column] = $model->{$column}; } elseif (isset($model->{$rel}) && $model->{$rel} instanceof Model) { $sets[$column] = ':' . $column; $data[':' . $column] = $model->{$rel}->getPk(); } } break; } } $connection = $class::getDbConnection(); if ($model->isNew()) { $query = new Query(); $query->insert($class::getTableName())->values($sets)->params($data); $connection->execute($query); $model->{$class::PK} = $connection->lastInsertId(); } else { $query = new Query(); $query->update($class::getTableName())->values($sets)->where($this->quoteName($class::PK) . '=' . $model->getPk())->params($data); $connection->execute($query); } return $model; }