Executando qualquer tipo de consulta no Doctrine
Maio 7, 2008
Depois de procurar bastante, consegui descobrir como executar qualquer tipo de consulta usando o ORM Doctrine.
Eu precisava usar algumas funções específicas do PostgreSQL, o Doctrine não implementa todas as funções do PostgreSQL, o Doctrine faz isso para manter a compatibilidade entre todos os banco de dados que ele dá suporte. Algumas funções só funcionam em um determinado banco de dados.
O exemplo que eu vou ilustrar abaixo foi construído em cima do framework symfony, mas deve ser muito semelhate se você estiver trabalhando direto com o Doctrine.
O Doctrine foi construído em cima do PDO (http://br.php.net/manual/pt_BR/book.pdo.php), desta forma nós podemos pegar a instância do Doctrine e realizar uma consulta usando o PDO.
Por exemplo:
$manager = Doctrine_Manager::getInstance(); $dbh = $manager->getCurrentConnection(); $sql = "SELECT sua_funcao_do_banco(?)"; $sth = $dbh->prepare($sql); $sth->execute(array(10)); $r = $sth->fetch(PDO::FETCH_ASSOC);
Vamos entender como tudo funciona:
$manager = Doctrine_Manager::getInstance(); $dbh = $manager->getCurrentConnection();
O código acima pega a conexão atual com o banco de dados e usa ela para fazer a consulta.
$sql = "SELECT sua_funcao_do_banco(?)";
O SQL que você quer executar, pode ser qualquer sql que rode no seu banco de dados. Note o “?” esse cara informa que será passado um parâmetro.
$sth = $dbh->prepare($sql); $sth->execute(array(10)); $r = $sth->fetch(PDO::FETCH_ASSOC);
Essas linhas preparam o SQL, executando e substituindo o “?” do SQL pelo valor no array, no caso array(10).
Por fim é executando o fetch para pegar apenas um resultado, se a consulta retorna-se mais que um resultado você poderia fazer um fetchAll.
A linha PDO::FETCH_ASSOC informa como você quer que os dados sejam retornados em array, objeto e outros. Dá uma olhada aqui: http://br.php.net/manual/pt_BR/pdostatement.fetch.php
Pronto! Agora e só usar a variável $r para trabalhar com os dados retornados da consulta.
Leave a Reply