/** * Construct the argument list * * @param string $table name of the database table we need to create the list for * @return array */ protected static function arguments($table) { // get the list of columns from the table try { $columns = \DB::list_columns(trim($table), null, \Cli::option('db', null)); } catch (\Exception $e) { \Cli::write($e->getMessage(), 'red'); exit; } // construct the arguments list, starting with the table name $arguments = array($table); // set some switches $include_timestamps = false; $timestamp_is_int = true; // process the columns found foreach ($columns as $column) { // do we have a data_type defined? If not, use the generic type isset($column['data_type']) or $column['data_type'] = $column['type']; // skip the 'id' column, it will be added automatically if ($column['name'] == 'id') { continue; } // detect timestamp columns if (in_array($column['name'], array('created_at', 'updated_at'))) { $include_timestamps = true; $timestamp_is_int = $column['data_type'] == 'int'; continue; } // do we need to add constraints? $constraint = ''; foreach (array('length', 'character_maximum_length', 'display') as $idx) { // check if we have such a column, and filter out some default values if (isset($column[$idx]) and !in_array($column[$idx], array('65535', '4294967295'))) { $constraint = '[' . $column[$idx] . ']'; break; } } // if it's an enum column, list the available options if (in_array($column['data_type'], array('set', 'enum'))) { $constraint = '[' . implode(',', $column['options']) . ']'; } // store the column in the argument list $arguments[] = $column['name'] . ':' . $column['data_type'] . $constraint; } // set the switches for the code generation \Cli::set_option('no-timestamp', $include_timestamps === false); \Cli::set_option('mysql-timestamp', $timestamp_is_int === false); // return the generated argument list return $arguments; }
/** * Generate documentation from config * * Usage (from command line): * * php oil r dbdocs:fromconfig * * @param $dir Documentation directory * @param $name Name of config */ public static function fromconfig($dir = null, $name = null) { if ($dir === null) { static::help(); exit; } \Config::load('dbdocsconnections', true); $connections = \Config::get('dbdocsconnections', array()); if (empty($connections)) { \Cli::write('Configuration is empty.', 'red'); } else { if ($name === null) { $name = trim(\Cli::prompt("Enter a name.\n", array_keys($connections))); } else { if (!isset($connections[$name])) { \Cli::write("Not Found configuration \"{$name}\"", 'red'); exit; } } \Cli::set_option('n', true); foreach ($connections[$name] as $k => $v) { if (!empty($k) and $k != 'driver') { \Cli::set_option($k, $v); } } switch ($connections[$name]['driver']) { case 'pdo_mysql': static::mysql($dir); break; case 'pdo_pgsql': static::pgsql($dir); break; case 'pdo_sqlite': static::sqlite($dir); break; case 'pdo_sqlsrv': static::mssql($dir); break; } } }