/** * @param PerfORM $model * @param string $from */ public function renameTable($model, $from) { if ($model->isTable()) { $template = $this->getTemplate('table-rename'); $template->table = $this->getRenameTable($model, $from); } elseif ($model->isView()) { $template = $this->getTemplate('view-rename'); $template->view = $this->getRenameView($model, $from); } $this->renderToBuffer($template, 'alters'); }
/** * Magic method for getting field's values * @param string $name * @return mixed */ public function &__get($name) { $name = strtolower($name); if ($this->hasField($name)) { if (key_exists($name, $this->fields)) { $field = $this->getField($name); if ($field->getIdent() == PerfORM::DateTimeField || $field->getIdent() == PerfORM::TimeField || $field->getIdent() == PerfORM::DateField) { return $field; } elseif ($field->getIdent() == PerfORM::ForeignKeyField && $field->isEnabledLazyLoading() && !is_null($lazyLoadingKeyValue = $field->getValue())) { $referenceModel = get_class($field->getReference()); $model = new $referenceModel(); $model->objects()->load('id=%i', $lazyLoadingKeyValue); $field->setValue($model); $field->disableLazyLoading(); } $result = $field->getValue(); return $result; } elseif ($this->isExtended()) { $result = $this->extends->__get($name); return $result; } else { throw new Exception('logic exception'); } } else { throw new Exception("Model '" . get_class($this) . "' does not contain field '{$name}'."); } }
/** * Getter for datasource * @return DibiDataSource */ public function getDataSource() { if (!$this->dataSource) { # build query $query = array(); $query[] = "\nSELECT"; $this->addFields($this->model); $query[] = implode(",\n", $this->fields); $query[] = sprintf("FROM \"%s\"", $this->model->getTableName()); $this->addJoins($this->model); $query[] = implode("\n", $this->joins); $this->dataSource = new DibiDataSource(implode("\n", $query), PerfORMController::getConnection()); } return $this->dataSource; }
/** * @param PerfORM $model * @param string $from * @return stdClass */ public function getRenameView($model, $from) { return (object) array('view' => $model->getTableName(), 'from' => $from); }
/** * Update model in storage, sets hashes for it's model * @param PerfORM $model */ public function updateModelSync($model) { $this->query('update [tables] set [hash] = %s where [name] = %s', $model->getHash(), $model->getTableName()); }