Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * phalcon pdo tests
- *
- */
- ini_set('display_errors', 1);
- error_reporting(E_ALL);
- $nameSpace = 'Desk3';
- $tableName = @$argv[1];
- $saveLocal = @$argv[2];
- if (empty($tableName)) {
- echo 'usage: ' . PHP_EOL;
- echo " $> php {$argv[0]} <tablename> [test]" . PHP_EOL;
- die();
- }
- $cfg = parse_ini_file('./app/config/config.ini', true, INI_SCANNER_TYPED);
- if (empty($cfg)) {
- echo 'unable to parse ./app/config/config.ini' . PHP_EOL;
- die();
- }
- $className = str_replace('_', '', ucwords($tableName, '_'));
- if ($saveLocal != 'test') {
- $modelName = "{$cfg['application']['modelsDir']}{$nameSpace}/{$className}.php";
- if (file_exists($modelName)) {
- echo "model `{$className}` already exists" . PHP_EOL;
- die();
- }
- } else {
- $modelName = "./test_{$className}.php";
- }
- //$cfg = [
- // 'dsn' => 'mysql',
- // 'host' => 'localhost',
- // 'port' => 3406,
- // 'schema' => 'coo_maria',
- // 'username' => 'root',
- // 'password' => 'mariar00t',
- // 'charset' => 'utf8'
- //];
- $tranz = [
- 'LONGLONG' => 'integer',
- 'LONG' => 'integer',
- 'TINY' => 'integer',
- 'VAR_STRING' => 'string',
- 'BLOB' => 'string',
- 'DATETIME' => 'string',
- 'NEWDECIMAL' => 'double',
- 'DOUBLE' => 'double',
- 'DATE' => 'string',
- 'INT24' => 'integer',
- 'TIMESTAMP' => 'string'
- ];
- $db = new PDO(
- "{$cfg['database']['adapter']}:host={$cfg['database']['host']};port={$cfg['database']['port']};dbname={$cfg['database']['dbname']};charset={$cfg['database']['charset']}",
- "{$cfg['database']['username']}",
- "{$cfg['database']['password']}",
- [
- PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
- PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
- PDO::ATTR_EMULATE_PREPARES => false,
- PDO::ATTR_PERSISTENT => true
- ]
- );
- $tableMeta = [];
- $result = $db->query("select * from {$tableName} limit 0");
- foreach (range(0, $result->columnCount()-1) as $columnIndex) {
- $x = $result->getColumnMeta($columnIndex);
- // print_r ($x);
- // echo PHP_EOL . PHP_EOL;
- $tableMeta[$columnIndex]['type'] = @$tranz[$x['native_type']] ?: 'string';
- $tableMeta[$columnIndex]['ispk'] = in_array('primary_key', $x['flags']); // ? 'true' : 'false';
- $tableMeta[$columnIndex]['nullable'] = !in_array('not_null', $x['flags']) ? 'true' : 'false';
- $tableMeta[$columnIndex]['size'] = ($tableMeta[$columnIndex]['type'] == 'string') ? intval($x['len'] / 3) : intval($x['len']);
- if (in_array($x['native_type'], ['BLOB', 'DATETIME', 'DATE', 'TIMESTAMP'])) {
- $tableMeta[$columnIndex]['size'] = -1;
- }
- $tableMeta[$columnIndex]['fieldName'] = $x['name'];
- $tableMeta[$columnIndex]['setName'] = 'set' . str_replace('_', '', ucwords($x['name'], '_'));
- $tableMeta[$columnIndex]['getName'] = 'get' . str_replace('_', '', ucwords($x['name'], '_'));
- }
- $db = null;
- //print_r($tableMeta);
- //die();
- $timestamp = date('Y-m-d, H:i:s');
- $i = 0;
- ob_start();
- // namespace
- echo "<?php\n\nnamespace Desk3;\n\n";
- // start class
- echo "/**\n * {$className}\n *\n * @package Desk3\n * @autogenerated by Gavin Developer Tools\n * @date {$timestamp}\n */\n";
- echo "class {$className} extends BaseModel\n{\n\n";
- $primaryKey = '';
- // place member variables
- foreach ($tableMeta as $fieldMeta) {
- echo "\t/**\n\t *\n\t * @var {$fieldMeta['type']}\n";
- if ($fieldMeta['ispk'] == true) {
- echo "\t * @Primary\n\t * @Identity\n";
- $primaryKey = $fieldMeta['fieldName'];
- }
- echo "\t * @Column(type=\"{$fieldMeta['type']}\", ";
- if ($fieldMeta['size'] > 0) {
- echo "length={$fieldMeta['size']}, ";
- }
- echo "nullable={$fieldMeta['nullable']})\n\t */\n";
- echo "\tprotected \${$fieldMeta['fieldName']};\n\n";
- }
- echo "\n";
- // place setters
- foreach ($tableMeta as $fieldMeta) {
- echo "\t/**\n\t * Method to set the value of field {$fieldMeta['fieldName']}\n\t *\n";
- echo "\t * @param {$fieldMeta['type']} \${$fieldMeta['fieldName']}\n";
- echo "\t * @return \$this\n\t */\n";
- echo "\tpublic function {$fieldMeta['setName']}(\${$fieldMeta['fieldName']})\n\t{\n";
- echo "\t\t\$this->{$fieldMeta['fieldName']} = \${$fieldMeta['fieldName']};\n\n";
- echo "\t\treturn \$this;\n\t}\n\n";
- }
- echo "\n";
- // place getters
- foreach ($tableMeta as $fieldMeta) {
- echo "\t/**\n\t * Returns the value of field {$fieldMeta['fieldName']}\n\t *\n";
- echo "\t * @return {$fieldMeta['type']}\n\t */\n";
- echo "\tpublic function {$fieldMeta['getName']}()\n\t{\n";
- echo "\t\treturn \$this->{$fieldMeta['fieldName']};\n\t}\n\n";
- }
- echo "\n";
- // place initialize
- echo "\t/**\n\t * Initialize method for model.\n\t */\n";
- echo "\tpublic function initialize()\n\t{\n";
- echo "\t\tparent::initialize();\n\n\t\t\$this->setSource('{$tableName}');\n\n";
- if (!empty($primaryKey)) {
- echo "\t\t// skip primary key on create and update as it is auto-create\n";
- echo "\t\t\$this->skipAttributes([\n\t\t\t'{$primaryKey}'\n\t\t]);\n";
- }
- echo "\t}\n";
- // end class
- echo "}\n";
- $contents = ob_get_contents();
- ob_end_clean();
- file_put_contents($modelName, $contents);
- echo ("{$className} generated");
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement