PHP Data Object (PDO) de maneira Produtiva: construindo um mini query builder — Parte 3
Continuando a abstração do PDO para trazer versatilidade à camada de dados, nesta publicação abordaremos a criação de um mini Query Builder aplicando todos os recurso da classe CRUD que desenvolvemos na publicação anterior.
Normalmente temos abordado as propriedades que farão parte da classe, na sequência os métodos públicos e, por último, os métodos auxiliares (privados). Nesta publicação vamos mexer um pouco nessa ordem, para dar conotação à origem das coisas.
Para começar, chamaremos este query builder de LightQueryBuilder. O objetivo desta classe é trabalhar de maneira mais fácil com o PDO definindo métodos comuns do dia a dia de qualquer programador(a), como os métodos find(), findById(), get(), joins (cross, inner, right, etc…), delete(), destroy(), select(), além de trabalhar com condições where() e muitas outras funcionalidades.
Propriedades
private static $table;
Armazena a tabela que sofrerá as ações dos métodos naquela instância PDO
private $class;
Configura a classe a ser utilizada no fetchClass configurado no PDO
protected $query = '';
Armazena a query que estará sendo contruída com os métodos dispostos neste Query Builder
protected $params;
Armazena os parâmetros que serão utilizados nas condições
protected $terms;
Onde os termos são salvos
protected $columns;
Armazena as colunas de uma dada consulta
protected $order;
Armazena a instrução de ordenação de determinada consulta
protected $group;
Armazena a instrução de agrupamento
protected $limit;
Armazena um valor inteiro correspondente ao limite de dados configurados em dada consulta
protected $offset;
Armazena um valor inteiro correspondente ao offset de dados configurados em dada consulta
public $fail;
Armazena a Exceção PDO (\PDOException
) em caso de erro no bloco try/catch
Dinamizando a Instância PDO com o método crud()
A instância PDO é realizada através da chamada do método crud()
como exemplifica o trecho da classe abaixo.
Observe que este método depende das propriedades static $table, $query, e, quando necessário, $params.
Portanto, ao que seguir nesta classe, para cada método estaremos chamando este método para obter uma instância PDO através da Classe CRUD.
Setters
Os setters do LightQueryBuilder compreendem somente dois métodos que são invocados pelo(a) programador(a) assim que instancia o mesmo, são eles:public static function setTable(string $table)
– Possui a responsabilidade de definir a tabela do banco de dados que será manipulada naquela instância PDO;public function setFetchClass(string $class)
– este método é responsável por passar a classe que o PDO se utilizará para armazenar os dados de retorno.
Observação: Caso não seja instanciado este método, você verá em uma seção próxima, a classe utilizada para esta necessidade é a \stdClass().
Getters
Os getters que se fazem necessários no LightQueryBuilder são os métodos getQuery()
e getFail()
, ambos para retornarem as respectivas propriedades .
Começando os métodos principais do LightQueryBuilder
Método toQuery()
A maioria dos métodos da classe farão uso interno do método toQuery()
para montar a query e a atribuir ầ propriedade $query
, executar o seu tratamento, como demonstra o trecho a seguir.
Observe que este método é público, para possibilitar que, até mesmo por fora da classe, o desenvolvedor possa fazer uso deste método para montar de forma customizada a query, afim de não ficar restrito aos métodos dispostos nesse query builder.
Método Select
Método Where
Métodos Operadores and(), or() e between()
Reaproveitando Métodos
Visto a versatilidade do SELECT, o método de mesmo nome é chamado internamente para a fabricação de outros métodos, como os que seguem.
Método Join
Neste método é importante fazer uma ressalva, eis que este foi preparado para receber no seu último parâmetro uma string, por meio de uma constante da própria classe, para trabalhar com diversos tipos de JOINS, são eles:public const INNER_JOIN;
public const LEFT_JOIN;
public const RIGHT_JOIN;
public const FULL_JOIN;
public const CROSS_JOIN;
Método Match
Método AVG
Método SUM
Ordenando, Agrupando e Limitando a Consulta
Métodos limit() e offset()
Método order()
Método group()
Métodos CRUD
Fugindo o padrão e chamando a Connect quando se faz necessário
Haverá situações onde se faz necessária uma consulta personalizada, à qual não existe método disponível para o retorno no dado que é necessário naquele momento. Para tal, nós podemos chamar uma nova instancia PDO diretamente da Classe Connect, como disposto abaixo.
Buscando o último ID com o método lastId()
Et voilà, está montada a nossa classe!
Se você chegou até aqui significa que conseguiu absorver todos os conceitos e técnicas aqui abordados. Ficará sob sua responsabilidade testar cada uma das implementações, bem como adicionar outras funcionalidades, obedecendo, é claro a estética que essa classe traz. Este conjunto de códgo está tambem disponível no meu GitHub, lá eu possuo separadamente cada uma das classes aqui construídas no formato de componente, ao qual você consegue estar fazendo uso através do Composer, deixarei os links aqui.
Fique à vontade para interagir com comentários e ou claps.
Onde aprendi PHP: UpInside Treinamento