Vadio 13 Denunciar post Postado Fevereiro 26, 2009 Pessoal estou tentando montar algo parecido com o hibernate do java para o php mas não estou conseguindo montar dinamicamente a query. abaixo possui minha classe q ira montar e executar minha query. o metodo construtor dessa classe pega valores do xml e passa para o array params (variavel da classe); no método save eu preciso pegar dinamicamente os dados do obj q a ele foi passado como parametro. para intender melhor olhe no 2foreach dessa função save. eu preciso q ele chame o obj->get.VariavelqVeioDoXML. ele escreve a variavel se eu mandar um "echo $this->params[$i]['name'])" bom não sei se soube explicar bem qual é minha dúvida. imagino q seja algo com eval q não estou conseguindo usar... se precisarem das outras 2 classes chamadas no inicio do arquivo para melhor intendimento do que eu estou tentando fazer é só pedir. Muito obrigado <?php require_once('class.SimpleXMLElementExtended.php'); require_once('Contato.class.php'); class DataMap{ private $xml; //XML private $table; private $class; private $params = array(); function DataMap($xmlFile){ try{ $this->xml = new SimpleXMLElementExtended($xmlFile,null,true); foreach($this->xml->class as $x=>$c){ $this->table = $c->getAttribute('table'); $this->class = $c->getAttribute('name'); foreach ($c as $y=>$z){ $param['node'] = $y; $param['name'] = $z->getAttribute('name'); $param['column'] = $z->getAttribute('column'); $param['type'] = $z->getAttribute('type'); $this->params[] = $param; } } }catch (Exception $e){ echo 'erro ao carregar arquivo'.$xmlFile; } } public function save($obj){ $query = "INSERT INTO ".$this->table; $query.= " ("; $i=0; foreach ($this->params as $x=>$y){ ($i == (sizeof($this->params)-1)) ? $char = "" : $char = ","; $query.= $this->params[$i]['column'].$char; $i++; }$query.= " )"; $query.= " VALUES ("; $i=0; foreach ($this->params as $x=>$y){ ($i == (sizeof($this->params)-1)) ? $char = "" : $char = ","; $query.= " '".$obj->get.eval("ucwords($this->params[$i]['name'])")."'".$char; $i++; }$query.= " )"; echo $query; //var_dump($obj); } } Compartilhar este post Link para o post Compartilhar em outros sites
Vadio 13 Denunciar post Postado Fevereiro 26, 2009 pra ajudar um pouco alterei o 2for da função save: foreach ($this->params as $x=>$y){ ($i == (sizeof($this->params)-1)) ? $char = "" : $char = ","; $var = '$obj->get'.ucwords($this->params[$i]['name'])."()\n"; echo $var; //echo eval($var); //$query.= " '".$obj->get.eval("ucwords($this->params[$i]['name'])")."'".$char; $i++; }esse código me retornou$obj->getId() $obj->getIdCliente() $obj->getTipo() $obj->getValor() INSERT INTO contatos (id,idCliente,tipo,valor ) VALUES ( ) agora eu preciso executar os "getters" para passar os valores do obj para a query. mas num to conseguindo fazer isso. Obrigado =D Compartilhar este post Link para o post Compartilhar em outros sites
Vadio 13 Denunciar post Postado Fevereiro 26, 2009 consegui! usando eval mesmo ficou assim public function save($obj){ $query = "INSERT INTO ".$this->table; $query.= " ("; $i=0; foreach ($this->params as $x=>$y){ ($i == (sizeof($this->params)-1)) ? $char = "" : $char = ","; $query.= $this->params[$i]['column'].$char; $i++; }$query.= " )"; $query.= " VALUES ("; $i=0; foreach ($this->params as $x=>$y){ ($i == (sizeof($this->params)-1)) ? $char = "" : $char = ","; $var = '$obj->get'.ucwords($this->params[$i]['name'])."()"; eval("\$var = $var;"); $query.= " '".$var."'".$char; $i++; }$query.= " );"; echo $query; } Compartilhar este post Link para o post Compartilhar em outros sites