/** * Método para recuperar um objeto do banco através do mapeamento * objeto relacional. A classe PHPDoc recupera os atributos da classe * * @param string $table * @param array $column * @param array $identificador ex: array(array( 'campo' => 'valor' ); */ public function getObject($object) { $this->object =& $object; $doc = new \core\dba\persistencia\PHPDoc(get_class($object)); /* * Define */ $this->setTable(get_class($object)); $this->select()->column(array($this->table => $doc->getColumn())); foreach ($doc->getPK() as $pk) { if (!is_null($this->object->__get($pk))) { $this->select()->where($pk, "=", $this->object->__get($pk)); } } $this->setAttributes($this->execute()); }
public function save($action) { $doc = new \core\dba\persistencia\PHPDoc(get_class($this->object)); if ($action == "insert") { foreach ($doc->getColumn() as $atributes) { if (!is_null($this->object->__get($atributes))) { $columnValue[$atributes] = $this->object->__get($atributes); } } $this->insert()->add($columnValue, "tab_Pop"); $this->execute(); } elseif ($action == "update") { foreach ($doc->getColumn() as $atributes) { if (!is_null($this->object->__get($atributes))) { if (!in_array($atributes, $doc->getPK())) { $columnValue[$atributes] = $this->object->__get($atributes); } } } $this->update()->add($columnValue, array("idPop" => $this->object->__get("idPop")), "tab_Pop"); $this->execute(); } /* Tratamento automatizado da função de persistência de dados * (if) - tratamento para tabelas com uma chave primária * (else) - tratamento para tabelas com mais de uma chave primaria */ if (count($doc->getPK()) == 1) { # regra valida somente quando houver uma única chave primária /* (if) - tratamento para PK do tipo auto_increment e não nula ( define uma ação do tipo update ) * (else) - tratamento para PK do tipo auto_increment nula ( define ação do tipo insert ) */ if (!is_null($doc->getAutoincrement())) { # a chave primária é do tipo auto_increment if (!is_null($this->object->__get($doc->getPK()))) { # pk não nula, realizar update } elseif (is_null($this->object->__get($doc->getPK()))) { #pk nula, realizar insert } } else { # chave primária gerada pelo usuário ou calculada pelo sistema # -> pode ser usada por entidades fracas, cuja chave primária é composta # passo 1: verificar a validade da chave (regra de negócio) # passo 2: consultar a base de dados para verificar a existência da chave # passo 3: se a chave existir na base de dados } } elseif (count($doc->getPK()) > 1) { # regra válida quando houver mais de uma chave primária } foreach ($doc->getColumn() as $atributes) { if (!is_null($this->object->__get($atributes))) { $columnValue[$atributes] = $this->object->__get($atributes); } } }