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

4 thoughts on “Executando comandos SQL no CakePHP

    Tarciso said:
    25/05/2010 at 15:01

    Também andei apanhando pra isso no cake.. no meu caso eu peguei um site iniciado, mas só tinha alguns cadastros, qdo precisei rodar uma consulta minha, foi aquele sofrimento… rsrrsr

    legal a dica do $useTable=false; não sabia, eu estava declarando as funções no modulo de outras tabelas;

      Marcelo Martins said:
      09/09/2010 at 00:07

      Olá amigos, estou iniciando no Cake e gostaria de saber como executo o site, ou melhor, o formulário de preenchimento de cadastro de usuario.
      Estou seguindo um tutorial da IBM , e a dica lá é para lançar da seguinte forma:

      Experimente

      Todas as partes se encaixaram no devido lugar. É hora de trazer Tor para a vida. Inicie seu navegador e comece.

      Carregue a visualização de registro acessando http://localhost/users/register. Você deverá ver algo semelhante à Figura 4.

      Mas , ocorre a seguinte msg no browser:

      Not Found

      The requested URL /users/register was not found on this server.

      Alguém tem uma dica ? Como executar um ficheiro com a extensão *.ctp ?

        Alberane said:
        10/09/2010 at 00:16

        Olá Marcelo,

        Confira as configurações do seu arquivo .htacces, pela sua descrição não foi possível confirmar qual servidor está usando e em qual sistema operacional.

        verifique se seu servidor (Apache/IIS/etc) está configurado corretamente com rewrite_mod.

        Os arquivos .ctp são os arquivos de templates do cake… não será necessário acessá-los ou executá-los. Internamente o cake fará isso pra você.

        Basicamente os arquivo .ctp são arquivos html/css/php normais… apenas a extensão é diferente, mera padronização do cake.

    filiperoberto said:
    13/03/2015 at 13:04

    Muito bom cara, eu tenho um site onde faço cadastro de personagens e quero mudar ele para salvar cada revisão feita. Acho que usar o find nessa mudança vai me dificultar muito. Vou tentar essa tua dica, valeu!

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios são marcados com *