/** * importSchema * * A method to import a Schema and translate it into a Soup_Record object * * @param string $schema The file containing the XML schema * @param string $format Format of the schema file * @param string $directory The directory where the Soup_Record class will be written * @param array $models Optional array of models to import * * @return void */ public function importSchema($schema, $format = 'yml', $directory = null, $models = array()) { $schema = (array) $schema; $builder = new Soup_Import_Builder(); $builder->setTargetPath($directory); $builder->setOptions($this->getOptions()); $array = $this->buildSchema($schema, $format); if (count($array) == 0) { throw new Soup_Import_Exception(sprintf('No ' . $format . ' schema found in ' . implode(", ", $schema))); } foreach ($array as $name => $definition) { if (!empty($models) && !in_array($definition['className'], $models)) { continue; } $builder->buildRecord($definition); } }
public static function importSchema($directory, array $connections = array(), array $options = array()) { $classes = array(); $builder = new Soup_Import_Builder(); $builder->setTargetPath($directory); $builder->setOptions($options); $definitions = array(); foreach (self::listTables() as $table) { $definition = array(); $definition['tableName'] = $table; $definition['className'] = Soup_Inflector::classify(Soup_Inflector::tableize($table)); $definition['columns'] = self::listTableColumns($table); $definition['connection'] = null; $definition['connectionClassName'] = $definition['className']; try { $definition['relations'] = array(); $relations = self::listTableRelations($table); $relClasses = array(); $counter = array(); foreach ($relations as $relation) { $table = $relation['table']; $class = Soup_Inflector::classify(Soup_Inflector::tableize($table)); $counter[$table] = isset($counter[$table]) ? $counter[$table] + 1 : 1; if (in_array($class, $relClasses)) { $alias = $class . '_' . $counter[$table]; } else { $alias = $class; } $relClasses[] = $class; $definition['relations'][$alias] = array('alias' => $alias, 'class' => $class, 'local' => $relation['local'], 'foreign' => $relation['foreign']); } } catch (Exception $e) { } $definitions[strtolower($definition['className'])] = $definition; $classes[] = $definition['className']; } // Build opposite end of relationships foreach ($definitions as $definition) { $className = $definition['className']; $relClasses = array(); $counter = array(); foreach ($definition['relations'] as $alias => $relation) { $counter[$relation['class']] = isset($counter[$relation['class']]) ? $counter[$relation['class']] + 1 : 1; if (in_array($relation['class'], $relClasses) || isset($definitions[$relation['class']]['relations'][$className])) { $alias = $className . '_' . (count($relClasses) + 1); // $alias = $className . '_' . $counter[$className]; } else { $alias = $className; } $relClasses[] = $relation['class']; $definitions[strtolower($relation['class'])]['relations'][$alias] = array('type' => Soup_Table::RELATION_MANY, 'alias' => $alias, 'class' => $className, 'local' => $relation['foreign'], 'foreign' => $relation['local']); } } // Build records foreach ($definitions as $definition) { $builder->buildRecord($definition); } return $classes; }
/** * importSchema * * method for importing existing schema to Soup_Record classes * * @param string $directory * @param array $connections Array of connection names to generate models for * @return array the names of the imported classes */ public function importSchema($directory, array $connections = array(), array $options = array()) { try { $classes = array(); print 'start'; $connection = Soup_Manager::getDefaultConnection(); $builder = new Soup_Import_Builder(); $builder->setTargetPath($directory); $builder->setOptions($options); $definitions = array(); print_r($connection->getImport()); foreach ($connection->getImport()->listTables() as $table) { $definition = array(); $definition['tableName'] = $table; $definition['className'] = Soup_Inflector::classify(Soup_Inflector::tableize($table)); $definition['columns'] = $connection->getImport()->listTableColumns($table); $definition['connection'] = $connection->getName(); $definition['connectionClassName'] = $definition['className']; try { $definition['relations'] = array(); $relations = $connection->getImport()->listTableRelations($table); $relClasses = array(); foreach ($relations as $relation) { $table = $relation['table']; $class = Soup_Inflector::classify(Soup_Inflector::tableize($table)); if (in_array($class, $relClasses)) { $alias = $class . '_' . (count($relClasses) + 1); } else { $alias = $class; } $relClasses[] = $class; $definition['relations'][$alias] = array('alias' => $alias, 'class' => $class, 'local' => $relation['local'], 'foreign' => $relation['foreign']); } } catch (Exception $e) { } $definitions[strtolower($definition['className'])] = $definition; $classes[] = $definition['className']; } // Build opposite end of relationships foreach ($definitions as $definition) { $className = $definition['className']; $relClasses = array(); foreach ($definition['relations'] as $alias => $relation) { if (in_array($relation['class'], $relClasses) || isset($definitions[$relation['class']]['relations'][$className])) { $alias = $className . '_' . (count($relClasses) + 1); } else { $alias = $className; } $relClasses[] = $relation['class']; $definitions[strtolower($relation['class'])]['relations'][$alias] = array('type' => Soup_Table::RELATION_MANY, 'alias' => $alias, 'class' => $className, 'local' => $relation['foreign'], 'foreign' => $relation['local']); } } // Build records foreach ($definitions as $definition) { $builder->buildRecord($definition); } return $classes; } catch (Exception $e) { throw new Soup_Import_Exception($e->getMessage()); } }