コード例 #1
0
 /**
  * Inicia a anlise de um objeto
  * @return void
  */
 public function init()
 {
     $ref = new ReflectionClass($this->object);
     $parentClassesArray = array($ref);
     while ($ref->getParentClass()->getName() != CRUD::getTopLevelClass()) {
         $ref = $ref->getParentClass();
         $parentClassesArray[] = $ref;
     }
     $parentClassesArray = array_reverse($parentClassesArray);
     foreach ($parentClassesArray as $ref) {
         /*@var $ref ReflectionClass */
         foreach ($ref->getProperties() as $prop) {
             /* @var $prop ReflectionProperty */
             $this->readDocComment($prop);
         }
     }
     $this->initCheck = true;
 }
コード例 #2
0
 /**
  * Cria a tabela no banco conforme os dados da tabela, se vc precisa alterar a estrutura
  * da tabela, ou use um Gerenciador de BD para alterála (lembre-se de atualizar
  * o PHPDoc)
  *
  */
 public function createTable($topLevelClass = "", $onDelete = "SET NULL", $onUpdate = "CASCADE")
 {
     $pkStr = "";
     if (empty($topLevelClass)) {
         $topLevelClass = CRUD::getTopLevelClass();
     }
     $sqlToSave = "";
     $ref = new ReflectionClass($this->DAO_Object);
     $parentClassesArray = array($ref);
     while ($ref->getParentClass()->getName() != $topLevelClass) {
         $ref = $ref->getParentClass();
         $parentClassesArray[] = $ref;
     }
     $parentClassesArray = array_reverse($parentClassesArray);
     foreach ($parentClassesArray as $ref) {
         //caso tenha superClasses
         $superTableName = $this->buildTableName($ref->getName());
         /*******************************************************************
          * GERAÇÃO DE SUPER-TABELAS
          * gera as tabelas das classes pais
          ******************************************************************/
         $sql = "";
         $sql .= "CREATE TABLE IF NOT EXISTS `" . Connection::getDataBaseName() . "`.`" . $superTableName . "` (";
         $fks = "";
         foreach ($this->buildTableColumns($ref->getName()) as $column) {
             if (count($column) <= 2) {
                 continue;
             }
             $sql .= "`" . $column[0] . "` " . $column[2] . " ";
             $cont = 0;
             foreach ($column as $columnDetail) {
                 if ($cont > 2) {
                     $sql .= $columnDetail . " ";
                 }
                 ++$cont;
             }
             if (class_exists($column[1])) {
                 try {
                     $onDeleteConst = $ref->getConstant(self::ON_DELETE_CLASS_CONST);
                     $onUpdateConst = $ref->getConstant(self::ON_UPDATE_CLASS_CONST);
                     if ($onDeleteConst) {
                         $onDelete = $onDeleteConst;
                     }
                     if ($onUpdateConst) {
                         $onUpdate = $onUpdateConst;
                     }
                 } catch (Exception $ex) {
                 }
                 $fks .= ", CONSTRAINT `fk_" . $ref->getName() . "_" . $column[0] . "`\r\n\t\t\t\t\t    FOREIGN KEY (`" . $column[0] . "` )\r\n\t\t\t\t\t    REFERENCES `" . Connection::getDataBaseName() . "`.`" . $this->buildTableName($column[1]) . "` (`id` )\r\n\t\t\t\t\t    ON DELETE {$onDelete}\r\n\t\t\t\t\t    ON UPDATE {$onUpdate}";
             }
             $sql .= " ,\r\n";
         }
         // varre o array de chaves primárias para criar abaixo
         if (!empty($this->pkArray)) {
             $pkStr = ",";
             foreach ($this->pkArray as $pk) {
                 $pkStr .= "`{$pk}`, ";
             }
             $pkStr = substr($pkStr, 0, -2);
         }
         $sql .= " PRIMARY KEY  (`" . self::PRIMARY_KEY_NAME . "`{$pkStr})";
         if (!empty($fks)) {
             $sql .= $fks;
         }
         if ($ref->getParentClass() && $ref->getParentClass()->getName() != $topLevelClass) {
             //caso tenha uma classe pai faz as FK
             $sql .= "\r\n\t\t\t\t  , CONSTRAINT `fk_" . $ref->getParentClass()->getName() . "_" . $ref->getName() . "`\r\n\t\t\t\t    FOREIGN KEY (`id` )\r\n\t\t\t\t    REFERENCES `" . Connection::getDataBaseName() . "`.`" . $this->buildTableName($ref->getParentClass()->getName()) . "` (`id` )\r\n\t\t\t\t    ON DELETE CASCADE\r\n\t\t\t\t    ON UPDATE CASCADE\r\n\t\t\t";
         }
         $sql .= ") ENGINE=" . Connection::getEngine() . " DEFAULT CHARSET=" . Connection::getCharset() . ";";
         //mysqli_query(CRUD::getConn() , $sql);
         $r = CRUD::executeQuery($sql);
         if (!$r) {
             echo "<h1>A tabela: " . $this->getDbTable() . " não pode ser criada</h1>";
             echo "<code>" . $sql . "<c/ode>";
         } else {
             echo 'Tabela "' . $superTableName . '" Criada com sucesso ! <br />';
         }
         $sqlToSave .= $sql . "\n\n";
         var_dump($sqlToSave);
     }
     $this->writeCreatesSql($sqlToSave);
 }