/** * Finds field object from relation notation * @param string $sourceField * @return Field */ protected function fieldLookup($sourceField) { if (preg_match("#^(id|pk)\$#i", $sourceField, $_match)) { if ($this->model->getPrimaryKey() or $this->model->hasField('id')) { return $_match[1] == 'pk' ? $this->model->getField($this->getModel()->getPrimaryKey()) : $this->model->getField($_match[1]); } else { throw new Exception('Model does not have primary key nor id field'); } } elseif (preg_match("#^[a-z0-9]+(__([a-z0-9_]+))+\$#i", $sourceField, $_match)) { return $this->getModel()->pathLookup($sourceField); } elseif (!preg_match("#__#", $sourceField) && $this->getModel()->hasField($sourceField)) { return $this->getModel()->getField($sourceField, true); } else { throw new Exception("Unable to translate field '{$sourceField}'."); } }
/** * @param PerfORM $model * @param string $from * @return stdClass */ public function getRenameTable($model, $from) { $renameSequences = array(); $renameIndexes = array(); if ($pk = $model->getPrimaryKey()) { $renameIndexes[] = $this->getPrimaryKey($model, $pk, $from); if (get_class($model->getField($pk)) == 'AutoField') { $renameSequences[] = (object) array('from' => $from . '_' . $pk . '_seq', 'to' => $model->getTableName() . '_' . $pk . '_seq'); } } $dropKeys = array(); foreach ($model->getForeignKeys() as $foreignKey) { $dropKeys[] = $this->getForeignKey($model, $foreignKey, $from); } $addKeys = array(); foreach ($model->getForeignKeys() as $foreignKey) { $addKeys[] = $this->getForeignKey($model, $foreignKey); } return (object) array('table' => $model->getTableName(), 'from' => $from, 'dropKeys' => $dropKeys, 'addKeys' => $addKeys, 'renameSequences' => $renameSequences, 'renameIndexes' => $renameIndexes); }