예제 #1
0
파일: QuerySet.php 프로젝트: Edke/PerfORM
 /**
  * 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}'.");
     }
 }
예제 #2
0
 /**
  * @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);
 }