private function _commonGenerate($tableName, $tableInfo)
{
if (count($tableInfo->getColumns()) === 0)
throw new Exception("Unable to find table or view $tableName in " . $this->_conn->getConnectionString() . ".");
else
{
$properties = array();
foreach ($tableInfo->getColumns() as $field => $column)
$properties[] = $this->generateProperty($field, $column);
$toString = $this->_buildSmartToString($tableInfo);
}
$clasName = $this->_getProperClassName($tableName);
$class = $this->generateClass($properties, $tableName, $clasName, $toString);
$output = $this->_opFile . DIRECTORY_SEPARATOR . $clasName . ".php";
file_put_contents($output, $class);
}
private function _getAllTableNames()
{
$command = $this->_conn->createCommand("Show Tables");
$dataReader = $command->query();
$dataReader->bindColumn(1, $table);
$tables = array();
while ($dataReader->read())
$tables[] = $table;
return $tables;
}
private function _getProperClassName($tableName)
{
$table_name_words = str_replace("_", " ", strtolower($tableName));
$final_conversion = str_replace(" ", "", ucwords($table_name_words));
return $this->_clasPrefix . $final_conversion . $this->_classSufix;
}
public function renderAllTablesInformation()
{
foreach ($this->_getAllTableNames() as $table_name)
{
echo $table_name . "
";
$tableInfo = $this->_gateway->getTableInfo($this->_conn, $table_name);
echo "Table info:" . "
";
echo "";
var_dump($tableInfo);
echo "
";
}
}
//-----------------------------------------------------------------------------
protected function generateProperty($field, $column)
{
$prop = '';
$name = '$' . $field;
/* TODO use in version 2.0 */
// $type = $column->getPHPType();
$prop .= "\tpublic $name;";
return $prop;
}
private function _renderRelations($tablename)
{
if (!isset($this->_relations[$tablename]))
return "";
$code = "\tpublic static \$RELATIONS = array (";
foreach ($this->_relations[$tablename] as $rel_data)
$code .= "\n\t\t'" . $rel_data["prop_name"] . "' => array(" . $rel_data["rel_type"] . ", '" . $rel_data["ref_class_name"] . "', '" . $rel_data["prop_ref"] . "'),";
$code = substr($code, 0, -1);
$code .= "\n\t);";
return $code;
}
private function _buildSmartToString($tableInfo)
{
$code = "\tpublic function __toString() {";
$property = "throw new THttpException(500, 'Not implemented yet.');";
try
{
foreach ($tableInfo->getColumns() as $column)
{
if (isset($column->IsPrimaryKey) && $column->IsPrimaryKey)
$property = str_replace($this->uqChars, "", $column->ColumnName);
elseif ($column->PHPType == "string" && $column->DBType != "date")
{
$property = str_replace($this->uqChars, "", $column->ColumnName);
break;
}
}
} catch (Exception $ex)
{
Prado::trace($ex->getMessage());
}
$code .= "\n\t\treturn \$this->$property;";
$code .= "\n\t}";
return $code;
}
protected function generateClass($properties, $tablename, $classname, $toString)
{
$props = implode("\n", $properties);
$relations = $this->_renderRelations($tablename);
$date = date('Y-m-d h:i:s');
$env_user = getenv("username");
return <<
}