[Resolvido] Usar encadeamento de métodos como parâmetro
Olá. Baseando-me um pouco no CodeIgniter, estou fazendo uma classe para formar query's e executá-las, só que um pouco diferente, de um jeito que achei melhor :)
Então... minha classe vai ter um método chamado query, esse método é quem vai executar o sql, e o único parâmetro dele é um encadeamento de métodos (que de alguma forma tem que retornar um código SQL), ex:
$manager->query($manager->select("table", "column1,column2")->where("id", "=", "5"))->fetch();
Parte da classe:
class manager {
/**
* Armazena o código SQL atual
* @var string
*/
private $sql;
/**
* Obtém o SQL atual
* @return string
*/
public function getSql() {
return $this->sql;
}
/**
* Insere um SELECT no SQL atual
* @param string $table Tabela a usar
* @param string $columns Colunas a selecionar
* @return mixed
*/
public function select($table, $columns) {
$this->sql = "SELECT ".$columns." FROM ".$table;
return $this;
}
/**
* Executa o código SQL atual
* @param string SQL a executar
* @return bool
*/
public function query($sql) {
return $pdo_instance->query($sql);
}
}
Bom, como todo encadeamento, no final eles retornam a instância (antes modificam o SQL atual, claro).
Imagino que se eu fizesse isso, funcionaria:
$manager->query($manager->select("table", "column1,column2")->where("id", "=", "5")->getSql())->fetch();
Porém quero que não precise usar nenhum método para obter o código SQL. Seria possível? Não quero ter que adicionar o método query() no final do encadeamento e apenas usar a propriedade $sql no query do PDO, fica meio sem sentido e feio e o que planejo fazer não funcionaria assim...
Alguém se dispõe a ajudar? :P
Discussão (9)
Carregando comentários...