Month: maio 2009

Executando comandos SQL no CakePHP

Posted on Updated on

Depois de muito pesquisar e me irritar com uma coisa que parece ser tão básica resolvi postar aqui o que eu tive dificuldades para encontrar na internet.

Eis o cenário:

Estou desenvolvendo um software com a finalidade de alimentar e ou sincronizar bancos de dados. Ele deve fazer o seguinte, quando o usuário acessar a url (http://www.site.com.br/sincronizacoes/sinc) o sistema lê vários bancos e várias tabelas, analisa algumas condições, prepara os dados e alimenta algumas tabelas de com esses dados.

Alguns adeptos do CakePHP poderiam dizer… “porque vc não usa o find()…. porque vc não usa os relacionamentos do Cake….etc…etc…”. Tudo bem! Acho até que seria possivel fazer com mais alguns dias de estudo do cake.

O problema é que não tinha esses dias e eu REALMENTE gostaria de usar as minhas queryes.

Porque?… São queryes enormes e eu já as tenho todas prontas, eu não queria reescrever tudo.

Como eu disse, é um processo simples mas acabei não encontrando uma documentação nem um relato preciso para o que eu queria. então vamos lá!

Como executar um comando SQL qualquer usando o Cake e obter o seu resultado

1)  Crie o seu controller:

class SincronizacoesController extends AppController {
 var $uses = array("Sincronizacao");
 function index(){
 }
 function sinc(){
 $this->set('vw_dados',$this->Sincronizacao->executaSinc());
 }
}

2) Crie o seu model:

class Sincronizacao extends AppModel{

 var $useTable = false;       

    # Esse é o segredo....
    # o seu model não vai usar nenhuma tabela...
    # apenas a conexão com o banco

 function index(){

 }

 public function executaSinc(){
     return($this->query("Execute aqui qualquer comando SQL que desejar"));
 }
}

Por fim, crie o view normalmente e trate os dados nele

<h1>Ufa!</h1>
<b>
 <?php pr($vw_dados); ?>
</b>

Pronto!… muito simples… mas se alguém não explicar fica complicado de se adivinhar. 😉

Até a próxima