Example #1
0
 public function __construct($modelsFolder, $di, $namespaceName = 'Model')
 {
     $filter = new \Zend_Filter_Word_UnderscoreToCamelCase();
     $phalconGenerator = new \Models\Phalcon\Generator($di);
     $tables = $phalconGenerator->getTablesData();
     if (!is_dir($modelsFolder . "\\" . 'Generated')) {
         mkdir($modelsFolder . "\\" . 'Generated', 0777, true);
     }
     $namespace = $namespaceName;
     $namespaceGenerated = $namespace . "\\Generated";
     foreach ($tables as $table) {
         $cg = new ClassGenerator($table['model'], 'Common', $namespaceGenerated);
         $fieldList = array();
         foreach ($table['columns'] as $field) {
             $cg->addProperty($field, 'protected');
             $fieldList[] = lcfirst($filter->filter($field));
         }
         $cg->addProperty('fieldList', 'protected', $fieldList);
         $content = "        return \"{$table['name']}\";";
         $cg->addMethod('getSource', 'public', array(), $content);
         $content = "";
         if (isset($table['ref_one_to_many'])) {
             foreach ($table['ref_one_to_many'] as $ref) {
                 $content .= "        \$this->belongsTo(\"{$ref['column']}\", '{$namespaceName}\\{$ref['model']}', \"{$ref['ref_column']}\", array('alias' => '{$ref['model']}'));\n";
                 $content2 = "        return \$this->getRelated('{$ref['model']}', \$parameters);";
                 $cg->addMethod('get' . $ref['model'], 'public', array(array('name' => 'parameters', 'default' => 'null')), $content2, "@return \\{$namespaceName}\\{$ref['model']}");
             }
         }
         if (isset($table['ref_many_to_one'])) {
             foreach ($table['ref_many_to_one'] as $ref) {
                 $content .= "        \$this->hasMany(\"{$ref['column']}\", '{$namespaceName}\\{$ref['model']}', \"{$ref['ref_column']}\", array('alias' => '{$ref['model']}'));\n";
                 $content2 = "        return \$this->getRelated('{$ref['model']}', \$parameters);";
                 $cg->addMethod('get' . self::getNameMany($ref['model']), 'public', array(array('name' => 'parameters', 'default' => 'null')), $content2, "@return \\{$namespaceName}\\{$ref['model']}[] ");
                 $varName = lcfirst($ref['model']);
                 $content3 = "        \$this->{$ref['model']} = array(\${$varName});";
                 $cg->addMethod('add' . $ref['model'], 'public', array(array('name' => $varName, 'type' => "\\{$namespaceName}\\{$ref['model']}")), $content3, "@return void");
             }
         }
         if (isset($table['ref_one_to_one'])) {
             foreach ($table['ref_one_to_one'] as $ref) {
                 $content .= "        \$this->hasOne(\"{$ref['column']}\", '{$namespaceName}\\{$ref['model']}', \"{$ref['ref_column']}\", array('alias' => '{$ref['model']}'));\n";
                 $content2 = "        return \$this->getRelated('{$ref['model']}', \$parameters);";
                 $cg->addMethod('get' . $ref['model'], 'public', array(array('name' => 'parameters', 'default' => 'null')), $content2, "@return \\{$namespaceName}\\{$ref['model']}");
             }
         }
         if ($content) {
             $cg->addMethod('initialize', 'public', array(), $content);
         }
         $content = "        return parent::findFirst(\$parameters);";
         $cg->addMethod('findFirst', 'public static', array(array('name' => 'parameters', 'default' => 'null')), $content, "@return \\{$namespaceName}\\{$table['model']}");
         $content = "        return parent::find(\$parameters);";
         $cg->addMethod('find', 'public static', array(array('name' => 'parameters', 'default' => 'null')), $content, "@return \\{$namespaceName}\\{$table['model']}[]");
         $content = "        return new \\{$namespaceName}\\{$table['model']}();";
         $cg->addMethod('get', 'public static', array(), $content, "@return \\{$namespaceName}\\{$table['model']}");
         $cg->generateGettersAndSetters();
         file_put_contents($modelsFolder . "\\Generated\\" . $table['model'] . '.php', $cg);
         if (!is_file($modelsFolder . "\\" . $table['model'] . '.php')) {
             $cg = new ClassGenerator($table['model'], "\\{$namespaceGenerated}\\{$table['model']}", 'Model');
             file_put_contents($modelsFolder . "\\" . $table['model'] . '.php', $cg);
         }
     }
     $cg = new ClassGenerator("Common", "\\Phalcon\\Mvc\\Model", "{$namespaceGenerated}");
     $content = "        \$query = new \\Phalcon\\Mvc\\Model\\Query(\$phql);\n";
     $content .= "        \$query->setDI(\$this->getDI());\n";
     $content .= "        return \$query;\n";
     $cg->addMethod('getQuery', 'public', array(array('name' => 'phql', 'default' => '')), $content, "@return \\Phalcon\\Mvc\\Model\\Query");
     $cg->addProperty('fieldList', 'protected', 'array()');
     $content = "        \$filter = new \\Zend_Filter_Word_UnderscoreToCamelCase();\n";
     $content .= "        foreach (\$data as \$k => \$v) {\n";
     $content .= "            if (in_array(\$k, \$this->fieldList)) {\n";
     $content .= "                \$fn = \"set\" . ucfirst(\$filter->filter(\$k));\n";
     $content .= "                \$this->\$fn(\$v);\n";
     $content .= "            }\n";
     $content .= "        }\n";
     $cg->addMethod('populate', 'public', array(array('name' => 'data', 'default' => 'array()')), $content, "@return null");
     file_put_contents($modelsFolder . "\\Generated\\Common.php", $cg);
 }