Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Vadio

[Resolvido] 

Recommended Posts

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.