/** * Oluşturulan SQL cümlesini çalıştırır * @return Null|Integer|Soup_Result */ public static function query($sql) { try { $smt = Soup_Manager::getDefaultConnection()->getAdapter()->query($sql); return $smt->fetchAll(Mysql::FETCH_ASSOC); } catch (Exception $e) { throw new Soup_Query_Exception($e->getMessage() . "<br /><br /><pre>" . $sql . "</pre>"); } }
public static function listTableRelations($tableName) { $relations = array(); $sql = "SELECT column_name, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME FROM information_schema.key_column_usage WHERE table_name = '" . $tableName . "' AND table_schema = '" . Soup_Manager::getDefaultConnection()->getDatabase() . "' and REFERENCED_COLUMN_NAME is not NULL ORDER BY CONSTRAINT_NAME ASC"; $results = Soup_Query::query($sql); foreach ($results as $result) { $result = array_change_key_case($result, CASE_LOWER); $relations[] = array('table' => $result['referenced_table_name'], 'local' => $result['column_name'], 'foreign' => $result['referenced_column_name']); } return $relations; }
/** * 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()); } }