SlideShare una empresa de Scribd logo
1 de 79
Descargar para leer sin conexión
Desenvolvendo em Zend Framework
       Ênfase no Zend_Db


                       www.fgsl.eti.br
                              

     Permitida a livre reprodução e cópia desde que citada a fonte
FLÁVIO GOMES DA SILVA LISBOA

BACHAREL EM CIÊNCIA DA COMPUTAÇÃO

ANALISTA DE DESENVOLVIMENTO DE SISTEMAS
SERVIÇO FEDERAL DE PROCESSAMENTO DE DADOS
(SERPRO)

ELABOROU O PROGRAMA DE TREINAMENTO EM PHP
DA EMPRESA

É AUTOR DO LIVRO

ZEND FRAMEWORK
DESENVOLVENDO EM PHP 5
ORIENTADO A OBJETOS COM MVC

                      
Desenvolvendo em Zend Framework



Nossa Agenda:

O    desenvolvimento    de    uma
aplicação em PHP com acesso a
banco de dados utilizando o editor
Eclipse com plugin PDT e a
biblioteca  de    classes    Zend
Framework.



                        
Desenvolvendo em Zend Framework



Arsenal Mínimo:

Apache 2.2.3 + com mod_rewrite
PHP 5.1.4 +
Zend Framework 1.5.0 +
Eclipse 3.3.2
Plugin PDT 1.0.3

Multiplataforma: Linux/Windows


                       
Desenvolvendo em Zend Framework



Usaremos aqui:

Apache 2.2.9 + com mod_rewrite
PHP 5.2.6 +
Zend Framework 1.6.2
Eclipse 3.3.2
Plugin PDT 1.0.3
MySQL 5.0.67

Sistema operacional: Ubuntu
                       
Desenvolvendo em Zend Framework



Por que não Eclipse 3.4?




Aguarde PDT 2.0, uma nova versão
para um novo ano!
                        
Desenvolvendo em Zend Framework



Editando um arquivo PHP no Eclipse




                       
Desenvolvendo em Zend Framework



Editando um arquivo PHP no Eclipse

Auto-complete (plugin PDT):

●Ativado pela digitação (forçado pelas
teclas CTRL + barra de espaços);
●Filtro dinâmico por texto parcial;

●Mostra   descrição, parâmetros e valor
de retorno;
●Templates    de blocos de código (if,
while, for, function).
                         
Desenvolvendo em Zend Framework



Editando um arquivo PHP no Eclipse

Auto-complete - Vantagens:

● Acelera a digitação;
● Evita erros de sintaxe;

●  Provê acesso rápido a informações
básicas sobre funções;
●   Reproduz inclusive as estruturas
criadas pelo usuário, como variáveis e
classes.
                        
Desenvolvimento Rápido com Zend Framework e Eclipse

Editando um arquivo PHP no Eclipse

Teclas úteis:

●Localizar/Substituir: CTRL+F
●Ir para uma linha: CTRL+L

●Completar a palavra: ALT + /

●Busca/Abertura   rápida de arquivo, mesmo
oculto: SHIFT+CTRL+R

Para exibir as linhas do arquivo: na barra à
esquerda do editor marque Show Line
Numbers

                                  
Desenvolvimento Rápido com Zend Framework e Eclipse



Janelas Úteis:

●PHP Explorer: Árvore hierárquica do
projeto.
●Outline:    Navegação    rápida   dos
componentes do arquivo selecionado.
●PHP Project Outline: Navegação rápida


por todos os componentes do projeto.
●PHP      Functions:   Referência   da
linguagem.


                                
Desenvolvimento Rápido com Zend Framework e Eclipse



PHP em mãos erradas




                                          Sinestro created by John Broome
                                          and Gil Kane  in 1961
                                          DC Comics All Rights Reserved

                               
Desenvolvimento Rápido com Zend Framework e Eclipse



Programador PHP Tradicional




                                             Green Lantern Hal 
                                             Jordan created by John 
                                             Brorome and Gil Kane in 
                                             1959
                                             DC Comics All Rights 
                                             Reserved

                               
Desenvolvimento Rápido com Zend Framework e Eclipse



Programador PHP Eventual




                                               Daffy Duck  created by 
                                               Tex Avery and Bob 
                                               Campett in 1937
                                               Warner Brothers All 
                                               Rights Reserved

                               
Desenvolvimento Rápido com Zend Framework e Eclipse



Programador PHP Ideal




                                               Rom created by Dankman, 
                                               Richard and McCoy in 1979
                                               Hasbro All Rights Reserved



                               
Zend Framework
      Desenvolvimento Rápido com Zend Framework e Eclipse



Biblioteca de classes PHP

●Software livre e gratuito (licença
amigável);
●Reutilizável;

●Extensível;

●Flexível;

●Simples;

●Evolução constante;

●Parceiros importantes;




                                 
Desenvolvimento Rápido com Zend Framework e Eclipse



Zend Framework: Arquitetura




                                                          Dengeki 
                                                          Sentai 
                                                          Changeman. 
                                                          Toei, 1985. 
                                                          Company All 
                                                          Rights 
                                                          Reserved.

                               
Desenvolvendo em Zend Framework



Zend Framework: Arquitetura


●Autenticação e Autorização
●Bancos de Dados

●Diagnóstico e Manutenção

●Filtragem e Validação

●Formulários Dinâmicos

●Infra-estrutura




                        
Desenvolvendo em Zend Framework



Zend Framework: Arquitetura


●Internacionalização
●Mail

●Model-View-Controller (MVC)

●Performance

●Busca

●Segurança

●Web Services



                       
Desenvolvimento Rápido com Zend Framework e Eclipse



Zend Framework: Arquitetura




                                                Firestorm created by
                                                Gery Conway and
                                                Al Milgrom in 1978
                                                DC Comics All Rights
                                                Reserved

                               
Desenvolvendo em Zend Framework



O que precisa ser configurado?

O arquivo httpd.conf do Apache, se
for usado o MVC do ZF (nosso
caso).

O arquivo php.ini com a extensão
do banco de dados a ser utilizado
(neste caso, pdo_mysql) se o PHP já
não tiver sido compilado com ela.
                        
Desenvolvendo em Zend Framework



httpd.conf


1: Configuração da permissão de sobrescrita das
configurações do httpd.conf por arquivos .htaccess

<Directory "[caminho definido em DocumentRoot">

  Options FollowSymLinks
  AllowOverride All
  Order allow,deny
  Allow from all
</Directory>


                            
Desenvolvendo em Zend Framework



httpd.conf


2: Os módulos: seção Dynamic
Shared Object (DSO) Support

LoadModule rewrite_module
modules/mod_rewrite.so



                       
Desenvolvendo em Zend Framework




                    
Desenvolvendo em Zend Framework



Vamos fazer uma aplicação em três
tempos (ou três camadas)?


              Demorou!




                       
Desenvolvendo em Zend Framework



Zend_DB

   Uma viagem, da abstração da
conexão até um acesso ao banco de
   dados totalmente orientado a
             objetos.

E um passeio por vários padrões de
             projeto!


                       
Desenvolvendo em Zend Framework




         Componente da vez: Zend_Db_Adapter

     Provê classes adaptadoras para as seguintes marcas
     de bancos de dados:
                                               E COMO 
     ●Firebird                                FUNCIONA, 
     ●IBM DB2                                   HEIN?
     ●Interbase

     ●MySQL

     ●Microsoft SQL Server
                                              Energizer created 
     ●Oracle
                                              by Louise Simonson
     ●PostgreSQL                              and June Brigman in
                                              1984
     ●SQLite
                                              Marvel Comics 
                                              All RightsReserved
                                   
Desenvolvendo em Zend Framework




      Você pode usar o construtor!



     require_once('Zend/Db/Adapter/Pdo/Mysql.php');
       $db = new Zend_Db_Adapter_Pdo_Mysql(array(
            'host'      => '127.0.0.1',
            'username'  => 'usuario',
            'password'  => '12345',
            'dbname'  => 'escola'
     ));




                                   
Desenvolvendo em Zend Framework




      Você pode usar o padrão Factory!



     require_once('Zend/Db.php');
     /* Carrega automaticamente a classe 
     Zend_Db_Adapter_Pdo_Mysql
      *  e cria uma instância dela.
     */
     $db = Zend_Db::factory('Pdo_Mysql', array(
          'host'      => '127.0.0.1',
          'username'  => 'usuario',
          'password'  => '12345',
          'dbname' => 'escola'
     ));
                                   
Desenvolvendo em Zend Framework




      Você pode usar sua classe adaptadora!



     require_once('Zend/Db.php');
     /* Carrega automaticamente a classe 
     MyProject_Db_Adapter_Pdo_Mysql e cria uma
     instância dela. */
     $db = Zend_Db::factory('Pdo_Mysql', array(
          'host' => '127.0.0.1',
          'username' => 'usuario',
          'password' => '12345',
          'dbname' => 'escola',
     'adapterNamespace' => 'MyProject_Db_Adapter'
     ));
                                   
Desenvolvendo em Zend Framework




      Você pode usar Zend_Config com Zend_Db!

     require_once('Zend/Db.php');
     require_once('Zend/Config.php');
     $config = new Zend_Config(
             array(
                'database' => array(
                   'adapter'  => 'Mysqli',
                   'params'  => array(
                      'dbname'  => 'escola',
                      'username' => 'usuario',
                      'password' => '12345',
                      'host'     => '127.0.0.1'
                   )
                )
             )
     );
     $db = Zend_Db::factory($config­>database);
                                   
Desenvolvendo em Zend Framework




     Você pode usar Zend_Config com Zend_Db!

     Ainda podemos carregar a configuração
     do banco de um arquivo externo,
     usando as classes filhas de
     Zend_Config:

     Zend_Config_Ini e Zend_Config_Xml



                                   
Desenvolvendo em Zend Framework




     Zend_Config_Ini, com sua simplicidade:

     Arquivo config.ini

     [database]
     db.adapter = PDO_MYSQL
     db.config.username = usuario
     db.config.password = 12345
     db.config.host = 127.0.0.1
     db.config.dbname = escola

                                   
Desenvolvendo em Zend Framework




     Zend_Config_Ini, com sua simplicidade:

     require_once('Zend/Db.php');
     require_once('Zend/Config/Ini.php');
     $config = new 
     Zend_Config_Ini('config.ini','database');
     $db = Zend_Db::factory(
           $config­>db­>adapter,
           $config­>db­>config­>toArray()
           ); 




                                   
Desenvolvendo em Zend Framework




   Zend_Config_Xml, com sua versatilidade:

  Arquivo config.xml
   <?xml version="1.0"?>
   <configdata>
       <production>
           <webhost>www.escola.com</webhost>
               <db>
               <adapter>pdo_mysql</adapter>
               <config>
                   <host>db.escola.com</host>
                   <username>pro_user</username>
                   <password>pro_secret</password>
                   <dbname>escola</dbname>
               </config>
               </db>
       </production>
       <development extends="production">
            <db>
               <config>
                   <host>127.0.0.1</host>
                   <username>usuario</username>
                   <password>12345</password>
               </config>
               </db>
       </development>                         
   </configdata>
Desenvolvendo em Zend Framework




     Zend_Config_Xml, com sua versatilidade:

 require_once('Zend/Db.php');
 require_once('Zend/Config/Xml.php');
 $config = new 
 Zend_Config_Xml('config.xml','development');

 $db = Zend_Db::factory(
       $config­>db­>adapter,
       $config­>db­>config­>toArray()
       ); 



                                   
Desenvolvendo em Zend Framework




     A CONEXÃO COM O BANCO É IMEDIATA?

 Você quer saber se na hora em que criar a instância
 de Zend_Db será feita a conexão e um atributo
 protegido em algum lugar receberá um tipo
 resource?

 A resposta é NÃO. A conexão é feita sob demanda, a
 partir da primeira consulta ao banco.

 Para forçar a conexão, use o método getConnection()


                                   
Desenvolvendo em Zend Framework



     Obtendo registros na forma de matrizes
     com o método fetchAll()


        
 $sql = 'SELECT * from alunos WHERE id > ?';
 $registros = $db­>fetchAll($sql,array(2));




                                   
Desenvolvendo em Zend Framework



     Obtendo registros na forma de matrizes
     com o método fetchAll()

 O resultado de fetchAll() por padrão é uma matriz de
 duas dimensões, onde a primeira equivale aos
 registros e a segunda aos campos. Na segunda, as
 chaves dos elementos são os nomes dos campos, se
 nada for dito em contrário.

 Esse último detalhe pode ser configurado com o
 método setFetchMode(), usando as constantes
 Zend_Db::FETCH...


                                   
Desenvolvendo em Zend Framework



     Obtendo somente a primeira coluna de
     uma consulta

 Se quiser somente a primeira coluna de uma
 consulta (o primeiro campo especificado na consulta,
 ou o primeiro definido na tabela), use o método
 fetchCol(). Ele retornará uma matriz uma dimensão.

 Para cada elemento, a chave é o número ordinal do
 registro na consulta (não na tabela) e o valor é
 conteúdo do campo.




                                   
Desenvolvendo em Zend Framework



     Obtendo somente a primeira linha de uma
     consulta

 Se quiser somente a primeira linha de uma consulta
 (o primeiro registro retornado pela mesma), use o
 método fetchRow(). Ele retornará uma matriz com
 uma dimensão.

 Para cada elemento, a chave é o nome (ou o ordinal)
 do campo e o valor é o conteúdo do mesmo.




                                   
Desenvolvendo em Zend Framework



     Inclusão de registros


 $data = array(
       "nome" => 'Peninha'
 ); 
 $db­>insert('alunos',$data);




                                   
Desenvolvendo em Zend Framework



   Pergunta:


 E se ao invés de colocar um valor diretamente, eu queira
 atribuir ao campo o valor de retorno de uma função do
 banco?

 SEM PROBLEMAS!

 Use uma instância de Zend_Db_Expr e passe a função como
 parâmetro para o construtor.

 <?php
 $data = array(
 'created_on' => new Zend_Db_Expr('CURDATE()'),
 'bug_description' => 'Something wrong',
 'bug_status' => 'NEW'
 );
                              
 $db­>insert('bugs', $data);
Desenvolvendo em Zend Framework



     Pergunta:


 E se eu quiser saber qual o id do registro
 incluído?

 Use a função getLastInsertId()




                                   
Desenvolvendo em Zend Framework



     Atualização de registros:


 $data = array(
        "nome" => 'Gansolino'
 ); 
 $where = $db­>quoteInto('nome 
 = ?','Peninha');
 $db­>update('alunos',$data,$where);




                                   
Desenvolvendo em Zend Framework



     Remoção de registros:


 $where = $db­>quoteInto('nome 
 = ?','Gansolino');
 $db­>delete('alunos',$where);




                                   
Desenvolvendo em Zend Framework



     O problema dos campos de texto


 O conteúdo de campos do tipo texto em
 SQL é cerceado por apóstrofos. Como
 isso pode gerar uma confusão com os
 apóstrofos, a classe Zend_Db fornece o
 método quote(), que envolve o texto
 com os mesmos.



                                   
Desenvolvendo em Zend Framework



     Controle de Transações


 <?php
 $db­>beginTransaction();
 try {
   $db­>query(...);
   $db­>commit();
 } catch (Exception $e) {
   $db­>rollBack();
   echo $e­>getMessage();
 }
                                   
Desenvolvendo em Zend Framework



   Informações sobre as Tabelas

 $lista = $db­>listTables();

 foreach($lista as $table)
 {
    echo "<h1>Tabela $table</h1>";
    $campos = $db­>describeTable($table);
    foreach ($campos as $nome => $dados)
    {
       echo "<p><b>$nome</b><br>";
       foreach ($dados as $chave => $valor)
       {
          echo "$chave = $valor<br>";
       }
       echo '</p>';
  
    }                        
 }
Desenvolvendo em Zend Framework



     Encerrando a Conexão


 Normalmente não é necessário fechar
 uma conexão de banco de dados. PHP
 automaticamente elimina todos os
 recursos e finaliza uma requisição.
 Extensões de bancos de dados são
 desenhadas para fechar a conexão assim
 que a referência para o objeto de recurso
 seja eliminada.
                                   
Desenvolvendo em Zend Framework



     Encerrando a Conexão


 $db­>closeConnection();




                                   
Desenvolvendo em Zend Framework



     Declarações: para quê servem?



                                       RECUPERAR 
                                          TUDO?
                                         NÃO, UM 
                                        REGISTRO 
                                         DE CADA 
                                           VEZ!
                    Green Arrow created 
                    by Mort Weisinger
                    and George Papp in
                    1941
                    DC Comics        
                    All RightsReserved
Desenvolvendo em Zend Framework



   Preparando Declarações SQL
   com o construtor de Zend_Db_Statement
 require_once('Zend/Db/Statement.php');
 require_once('Zend/Config/Xml.php');
 $config = new Zend_Config_Xml('config.xml','development');

 $db = Zend_Db::factory($config­>db­>adapter,$config­>db­>config­
 >toArray());

 $sql = 'SELECT * from alunos WHERE id > ?';

 $stmt = new Zend_Db_Statement_Pdo($db,$sql);

 $stmt­>execute(array(2));

 while ($registro = $stmt­>fetch())
 {
    foreach ($registro as $campo => $conteudo)
    {
        echo "$campo = $conteudo<br>";
    }
 }
                                    
Desenvolvendo em Zend Framework



   Preparando Declarações SQL
   com o próprio objeto Zend_Db
 require_once('Zend/Db/Statement.php');
 require_once('Zend/Config/Xml.php');
 $config = new Zend_Config_Xml('config.xml','development');

 $db = Zend_Db::factory($config­>db­>adapter,$config­>db­>config­
 >toArray());

 $sql = 'SELECT * from alunos WHERE id > ?';

 $stmt = $db­>query($sql,array(2));

 $stmt­>execute();

 while ($registro = $stmt­>fetch())
 {
    foreach ($registro as $campo => $conteudo)
    {
        echo "$campo = $conteudo<br>";
    }
 }
                                    
Desenvolvendo em Zend Framework



     Recupere uma única coluna

 require_once('Zend/Db/Statement.php');
 require_once('Zend/Config/Xml.php');
 $config = new Zend_Config_Xml('config.xml','development');

 $db = Zend_Db::factory($config­>db­>adapter,$config­>db­>config­
 >toArray());

 $sql = 'SELECT * from alunos WHERE id > ?';

 $stmt = $db­>query($sql,array(2));

 $stmt­>execute();

 while ($coluna = $stmt­>fetchColumn(1))
 {
    echo "$coluna<br>";
 }


                                   
Desenvolvendo em Zend Framework



     Consultas Orientadas a Objetos:
     Zend_Db_Select
 $db = Zend_Db::factory($config­>db­>adapter,$config­>db­>config­>toArray());

 $select = $db­>select();

 $select­>from('alunos');
 $select­>where('id > ?',2);
 $select­>order('nome');

 $stmt = $select­>query();

 $stmt­>execute();

 while ($registro = $stmt­>fetch())
 {
     echo '<p>';
     foreach ($registro as $campo => $conteudo)
     {
         echo "$campo = $conteudo<br>";
     }
     echo '</p>';
 }
                                       
Desenvolvendo em Zend Framework


                                      NÃO! TEM A 
          E EU TENHO                  INTERFACE 
              QUE                      FLUENTE!
           ESCREVER
             DESSE
             JEITO?


     Kingpinr created 
     by Stan Lee
     and John
                                        Spiderman created 
     Romita Sr. in
                                        by Stan Lee
     1967
                                        and Steve Ditko in
     Marvel Comics 
                                        1962
     All Rights
                                        Marvel Comics 
     Reserved
                                        All RightsReserved
                                   
Desenvolvendo em Zend Framework



   Zend_Db_Select:
   Interface Fluente
 require_once('Zend/Db.php');
 require_once('Zend/Config/Xml.php');
 $config = new Zend_Config_Xml('config.xml','development');

 $db = Zend_Db::factory($config­>db­>adapter,$config­>db­>config­>toArray()
            );

 $select = $db­>select();

 $select­>from('alunos')­>where('id > ?',2)­>order('nome');

 $stmt = $select­>query();

 $stmt­>execute();

 while ($registro = $stmt­>fetch())
 {
     echo '<p>';
     foreach ($registro as $campo => $conteudo)
     {
         echo "$campo = $conteudo<br>";
     }
     echo '</p>';                        
 }
Desenvolvendo em Zend Framework



     Zend_Db_Select:
     Obtendo a expressão SQL
 require_once('Zend/Db.php');
 require_once('Zend/Config/Xml.php');
 $config = new 
 Zend_Config_Xml('config.xml','development');

 $db = Zend_Db::factory(
         $config­>db­>adapter,
         $config­>db­>config­>toArray()
         );

 $select = $db­>select();

 $select­>from('alunos')­>where('id > ?',2)­
 >order('nome');

 echo $select­>__toString();
                                   
Desenvolvendo em Zend Framework



     Tabelas como Objetos:
     Zend_Db_Table
                                                        É A 
                                                  IMPLEMENTAÇÃO 
                                                   DO GATEWAY DE 
                                                 TABELA DE DADOS!




                                      Green Lantern Alan Scott
                                      created by Bill Finger
                                      and Martin Nodell in
                                      1940
                                      DC Comics
                                      All RightsReserved
Desenvolvendo em Zend Framework



     Zend_Db_Table :
     Criando o Modelo

 <?php
 require_once('Zend/Db/Table.php');
 class Alunos extends Zend_Db_Table
 {
   protected $_name = 'alunos';
 }
 ?>


                                   
Desenvolvendo em Zend Framework



     Zend_Db_Table :
     Usando o Modelo para Recuperar Registros
 require_once('Zend/Db.php');
 require_once('Zend/Config/Xml.php');
 require_once('Alunos.php');

 $config = new Zend_Config_Xml('config.xml','development');

 $db = Zend_Db::factory($config­>db­>adapter,$config­>db­config­
 >toArray());

 Zend_Db_Table_Abstract::setDefaultAdapter($db);

 $alunos = new Alunos();

 $where = $alunos­>getDefaultAdapter()­>quoteInto('id > ?',2);
 $registros = $alunos­>fetchAll($where,'nome');


                                   
Desenvolvendo em Zend Framework



     Zend_Db_Table :
     Usando o Modelo para Recuperar Registros
 foreach($registros as $registro)
 {
    echo '<p>';
    foreach ($registro­>toArray() as $campo => $conteudo)
    {
       echo "$campo = $conteudo<br>";
    }
    echo '</p>';
 }




                                   
Desenvolvendo em Zend Framework



   Zend_Db_Table :
   Incluindo registros
 require_once('Zend/Db.php');
 require_once('Zend/Config/Xml.php');
 require_once('Alunos.php');

 $config = new Zend_Config_Xml('config.xml','development');

 $db = Zend_Db::factory(
           $config­>db­>adapter,
           $config­>db­>config­>toArray()
           );

 Zend_Db_Table_Abstract::setDefaultAdapter($db);

 $alunos = new Alunos();

 $data = array(
              "nome" => 'Urtigão'
 );

 $alunos­>insert($data);
                                     
Desenvolvendo em Zend Framework



   Zend_Db_Table :
   Atualizando registros
 require_once('Zend/Db.php');
 require_once('Zend/Config/Xml.php');
 require_once('Alunos.php');

 $config = new Zend_Config_Xml('config.xml','development');

 $db = Zend_Db::factory(
           $config­>db­>adapter,
           $config­>db­>config­>toArray()
           );

 Zend_Db_Table_Abstract::setDefaultAdapter($db);

 $alunos = new Alunos();

 $data = array(
              "nome" => 'Vovó Donalda'
 );

 $where = $alunos­>getAdapter()­>quoteInto('id = ?',14);
                                   
 $alunos­>update($data,$where);
Desenvolvendo em Zend Framework



   Zend_Db_Table :
   Apagando registros
 require_once('Zend/Db.php');
 require_once('Zend/Config/Xml.php');
 require_once('Alunos.php');

 $config = new Zend_Config_Xml('config.xml','development');

 $db = Zend_Db::factory(
           $config­>db­>adapter,
           $config­>db­>config­>toArray()
           );

 Zend_Db_Table_Abstract::setDefaultAdapter($db);

 $alunos = new Alunos();

 $data = array(
              "nome" => 'Vovó Donalda'
 );

 $where = $alunos­>getAdapter()­>quoteInto('id = ?',15);
                                   
 $alunos­>delete($where);
Desenvolvendo em Zend Framework



     Conjuntos de Linhas como Objetos:
     Zend_Db_Rowset
                                             É A 
                                       IMPLEMENTAÇÃO 
                                        DO GATEWAY DE 
                                      LINHAS DE DADOS!




                                   
Desenvolvendo em Zend Framework



   Zend_Db_Rowset a partir de
   Zend_Db_Table

 As consultas feitas com os métodos fetchAll() e find()
 retornam objetos Zend_Db_Rowset.

 O método find() faz buscas diretamente pela chave
 primária.
 Se um valor simples for passado como parâmetro,
 ele retorna um objeto Zend_Db_Rowset com
 somente um objeto Zend_Db_Row.
 Se for passado uma matriz de valores, serão
 retornados tantos objetos Zend_Db_Row quantos os
 cujas chaves primárias combinarem com as da
 matriz.
                           
Desenvolvendo em Zend Framework



     Linhas como Objetos:
     Zend_Db_Row
 $alunos = new Alunos();

 $where = $alunos­>getDefaultAdapter()­>quoteInto('id > ?',2);

 $registros = $alunos­>fetchAll($where,'nome');

 while ($registro = $registros­>current())
 {
    echo '<p>';
    foreach ($registro­>toArray() as $campo => $conteudo)
    {
        echo "$campo = $conteudo<br>";
    }
    echo '</p>';
    $registros­>next();
 }


     OPA, TEM UM PADRÃO ITERATOR AQUI!
                                   
Desenvolvendo em Zend Framework



     Linhas como Objetos:
     Zend_Db_Row

                                                 TÁ, MAS PRA 
                                                  QUE SERVE 
                                                 AFINAL ESSE 
                                                ZEND_DB_ROW?




                                      The Thing
                                      created by Stan Lee
                                      and Jack Kirby in
                                      1961
                                      Marvel Comics
                                      All RightsReserved
Desenvolvendo em Zend Framework



     Zend_Db_Row:
     Objetos Persistentes
 require_once('Zend/Db.php');
 require_once('Zend/Config/Xml.php');
 require_once('Alunos.php');

 $config = new Zend_Config_Xml('config.xml','development');

 $db = Zend_Db::factory($config­>db­>adapter,$config­>db­>config­
 >toArray());

 Zend_Db_Table_Abstract::setDefaultAdapter($db);

 $alunos = new Alunos();

 $where = $alunos­>getDefaultAdapter()­>quoteInto('nome = ?','zico');
 $registro = $alunos­>fetchRow($where);

 $registro­>nome = 'zeca';
 $registro­>save();

  
     OPA, MAS ESSE É O PADRAO ACTIVE RECORD!
                                   
Desenvolvendo em Zend Framework



     Zend_Db_Row:
     Criar Objetos = Incluir Registros
 require_once('Zend/Db.php');
 require_once('Zend/Config/Xml.php');
 require_once('Alunos.php');

 $config = new Zend_Config_Xml('config.xml','development');

 $db = Zend_Db::factory(
           $config­>db­>adapter,
           $config­>db­>config­>toArray()
           );

 Zend_Db_Table_Abstract::setDefaultAdapter($db);

 $alunos = new Alunos();

 $registro = $alunos­>createRow();
 $registro­>nome = 'Chiquinho';
 $registro­>save();

                                      
Desenvolvendo em Zend Framework



     Zend_Db_Row:
     O Objeto Apaga o Registro (Ele Mesmo!)
 require_once('Zend/Db.php');
 require_once('Zend/Config/Xml.php');
 require_once('Alunos.php');

 $config = new Zend_Config_Xml('config.xml','development');

 $db = Zend_Db::factory(
           $config­>db­>adapter,
           $config­>db­>config­>toArray()
           );

 Zend_Db_Table_Abstract::setDefaultAdapter($db);

 $alunos = new Alunos();

 $registro = $alunos­>fetchRow("nome = 'Chiquinho'");
 $registro­>delete();


                                   
Desenvolvendo em Zend Framework



     Zend_Db_Row:
     E se os dados mudarem?

 Quando o objeto Zend_Db_Row é
 recuperado através de uma consulta, ele
 retorna com os dados do banco naquele
 momento. Atualizações no banco não
 são propagadas automaticamente para o
 objeto.

 Para carregar o objeto com os dados
 atualizados, use o método refresh().
                                   
Desenvolvendo em Zend Framework



     Monitore as Operações do Banco


 $profiler = $db­>getProfiler();

 Isso retorna uma instância de objeto Zend_Db_Profiler. Com essa instância, o
 desenvolvedor pode examinar suas consultas usando uma variedade de métodos:

 getTotalNumQueries() retorna o número total de consultas que foram executadas.
 ●




 ●getTotalElapsedSecs() retorna o número total de segundos transcorridos para
 todas as consultas executadas.

 getQueryProfiles() retorna um vetor de todos os perfis de consulta.
 ●




 ●getLastQueryProfile() retorna o último (mais recente) perfil de consulta, não
 obstante a consulta tenha ou não terminado. (se não tiver, a hora de término será
 nula)


                                         
Desenvolvendo em Zend Framework



     Monitore as Operações do Banco

 clear() limpa quaisquer perfis de consulta passados da pilha.
 ●




 O valor de retorno de getLastQueryProfile() e os elementos individuais de
 getQueryProfiles() são objetos Zend_Db_Profiler_Query, que provêem a habilidade
 de inspecionar as consultas individuais por elas mesmas:

 ●getQuery() retorna o texto SQL da consulta. O texto SQL de uma declaração
 preparada com parâmetros é o texto no momento em que a consulta for
 preparada, assim ela contém espaços reservados para valores de parâmetro, não
 os valores usados quando a declaração é executada.
 ●

 ●getQueryParams() retorna um vetor de valores de parâmetro usados quando
 executar uma consulta preparada. Isso inclui tanto parâmetros de combinação
 quanto argumentos para o método execute() de declaração. As chaves do vetor
 são
 ●índices de parâmetro posicionais (baseados em 1) ou nomeados (string).

 ●


  getElapsedSecs()   retorna o número de segundo que a consulta levou para rodar.
 ●
                                          
Desenvolvendo em Zend Framework



Terei que fazer tudo isso?

    Pode usar o projeto mínimo pra
    começar, ele está disponível em
           www.fgsl.eti.br.

Lembre-se de que é apenas um dos
   layouts possíveis para uma
            aplicação.


                          
Desenvolvendo em Zend Framework



Onde encontro ajuda?

http://framework.zend.com

www.zfbrasil.com

Tem um livro também, sabe...




                       
Desenvolvendo em Zend Framework



Contato:
flaviogomesdasilva@yahoo.com.br


    FOI UMA 
    GRANDE 
    HONRA!




                        

Más contenido relacionado

La actualidad más candente

Java 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral DetalhadoJava 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral DetalhadoRegis Magalhães
 
Introdução a Plataforma Java EE
Introdução a Plataforma Java EEIntrodução a Plataforma Java EE
Introdução a Plataforma Java EEEder Magalhães
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01Daniel Alves
 
Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011Flávio Lisboa
 
Apostila de Fundamentos Java
Apostila de Fundamentos JavaApostila de Fundamentos Java
Apostila de Fundamentos JavaMarcio Marinho
 
Escrevendo C# moderno 2019 - MVPConf
Escrevendo C# moderno 2019 - MVPConfEscrevendo C# moderno 2019 - MVPConf
Escrevendo C# moderno 2019 - MVPConfAntonio Maniero
 
Gráficos cada vez mais rápidos utilização de NDK e Renderscript
Gráficos cada vez mais rápidos utilização de NDK e RenderscriptGráficos cada vez mais rápidos utilização de NDK e Renderscript
Gráficos cada vez mais rápidos utilização de NDK e RenderscriptMotorola Mobility - MOTODEV
 
DDD + BDD + TDD - RF 2015
DDD + BDD + TDD - RF 2015 DDD + BDD + TDD - RF 2015
DDD + BDD + TDD - RF 2015 Eduardo Bregaida
 
JBoss Forge TDC - 2012 Florianópolis
JBoss Forge TDC - 2012 FlorianópolisJBoss Forge TDC - 2012 Florianópolis
JBoss Forge TDC - 2012 FlorianópolisGeorge Gastaldi
 
BDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemasBDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemasVitor Mattos
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerGiovanni Kenji Shiroma
 
Zend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil CompetenteZend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil CompetenteMichael Cardoso
 
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaÁlvaro Farias Pinheiro
 
Java 01 Java Visao Geral Resumo
Java 01 Java Visao Geral ResumoJava 01 Java Visao Geral Resumo
Java 01 Java Visao Geral ResumoRegis Magalhães
 
Introdução aos computadores e à World Wide Web
Introdução aos computadores e à World Wide WebIntrodução aos computadores e à World Wide Web
Introdução aos computadores e à World Wide WebCícero Quarto
 

La actualidad más candente (18)

Java 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral DetalhadoJava 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral Detalhado
 
Tutorial Java EE
Tutorial Java EETutorial Java EE
Tutorial Java EE
 
Introdução a Plataforma Java EE
Introdução a Plataforma Java EEIntrodução a Plataforma Java EE
Introdução a Plataforma Java EE
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01
 
Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011
 
Apostila de Fundamentos Java
Apostila de Fundamentos JavaApostila de Fundamentos Java
Apostila de Fundamentos Java
 
Escrevendo C# moderno 2019 - MVPConf
Escrevendo C# moderno 2019 - MVPConfEscrevendo C# moderno 2019 - MVPConf
Escrevendo C# moderno 2019 - MVPConf
 
Gráficos cada vez mais rápidos utilização de NDK e Renderscript
Gráficos cada vez mais rápidos utilização de NDK e RenderscriptGráficos cada vez mais rápidos utilização de NDK e Renderscript
Gráficos cada vez mais rápidos utilização de NDK e Renderscript
 
DDD + BDD + TDD - RF 2015
DDD + BDD + TDD - RF 2015 DDD + BDD + TDD - RF 2015
DDD + BDD + TDD - RF 2015
 
Conhecendo Java
Conhecendo JavaConhecendo Java
Conhecendo Java
 
JBoss Forge TDC - 2012 Florianópolis
JBoss Forge TDC - 2012 FlorianópolisJBoss Forge TDC - 2012 Florianópolis
JBoss Forge TDC - 2012 Florianópolis
 
BDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemasBDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemas
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & Docker
 
Frameworks PHP @edgarsandi
Frameworks PHP @edgarsandiFrameworks PHP @edgarsandi
Frameworks PHP @edgarsandi
 
Zend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil CompetenteZend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil Competente
 
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com Java
 
Java 01 Java Visao Geral Resumo
Java 01 Java Visao Geral ResumoJava 01 Java Visao Geral Resumo
Java 01 Java Visao Geral Resumo
 
Introdução aos computadores e à World Wide Web
Introdução aos computadores e à World Wide WebIntrodução aos computadores e à World Wide Web
Introdução aos computadores e à World Wide Web
 

Similar a Zend_Db orientado a objetos

Palestra Zend Framework CONAPHP CONISLI
Palestra Zend Framework CONAPHP CONISLIPalestra Zend Framework CONAPHP CONISLI
Palestra Zend Framework CONAPHP CONISLIFlávio Lisboa
 
Code Igniter & Zend Framework Uma UniãO De Sucesso
Code Igniter & Zend Framework   Uma UniãO De SucessoCode Igniter & Zend Framework   Uma UniãO De Sucesso
Code Igniter & Zend Framework Uma UniãO De SucessoJose Wilker
 
Aplicações Profissionais para Internet com Zend Framework
Aplicações Profissionais para Internet com Zend FrameworkAplicações Profissionais para Internet com Zend Framework
Aplicações Profissionais para Internet com Zend FrameworkFlávio Lisboa
 
MVC com Zend Framework
MVC com Zend FrameworkMVC com Zend Framework
MVC com Zend FrameworkFlávio Lisboa
 
Conhecendo o Zend Framework
Conhecendo o Zend FrameworkConhecendo o Zend Framework
Conhecendo o Zend FrameworkJaime Neto
 
Palestra Zend Framework CISL 2012 - ZF no Governo Federal
Palestra Zend Framework CISL 2012 - ZF no Governo FederalPalestra Zend Framework CISL 2012 - ZF no Governo Federal
Palestra Zend Framework CISL 2012 - ZF no Governo FederalFlávio Lisboa
 
Modernizando projetos legados usando APIs
Modernizando projetos legados usando APIsModernizando projetos legados usando APIs
Modernizando projetos legados usando APIsElton Minetto
 
.NET 2015, ASP.NET 5, C# 6 e tudo mais
.NET 2015, ASP.NET 5, C# 6 e tudo mais.NET 2015, ASP.NET 5, C# 6 e tudo mais
.NET 2015, ASP.NET 5, C# 6 e tudo maisakamud
 
O que esperar do framework Laminas
O que esperar do framework LaminasO que esperar do framework Laminas
O que esperar do framework LaminasFlávio Lisboa
 
Produtividade com ZF2, PDT & Zend Server Free Edition
Produtividade com ZF2, PDT & Zend Server Free EditionProdutividade com ZF2, PDT & Zend Server Free Edition
Produtividade com ZF2, PDT & Zend Server Free EditionFlávio Lisboa
 
O que esperar do Zend Framework 2
O que esperar do Zend Framework 2O que esperar do Zend Framework 2
O que esperar do Zend Framework 2Flávio Lisboa
 
Construção e provisionamento de ambientes de desenvolvimento virtualizados
Construção e provisionamento de ambientes  de desenvolvimento virtualizadosConstrução e provisionamento de ambientes  de desenvolvimento virtualizados
Construção e provisionamento de ambientes de desenvolvimento virtualizadosThiago Rodrigues
 
Mini Curso Zend Framework
Mini Curso Zend FrameworkMini Curso Zend Framework
Mini Curso Zend FrameworkAdler Medrado
 
Computação em Nuvem com PHP usando Zend Framework
Computação em Nuvem com PHP usando Zend FrameworkComputação em Nuvem com PHP usando Zend Framework
Computação em Nuvem com PHP usando Zend FrameworkFlávio Lisboa
 
Apresentação Flisol 2016
Apresentação Flisol 2016Apresentação Flisol 2016
Apresentação Flisol 2016Laryssa Muniz
 
Desmistificando o Framework da Zend
Desmistificando o Framework da ZendDesmistificando o Framework da Zend
Desmistificando o Framework da ZendDomingos Teruel
 

Similar a Zend_Db orientado a objetos (20)

Palestra Zend Framework CONAPHP CONISLI
Palestra Zend Framework CONAPHP CONISLIPalestra Zend Framework CONAPHP CONISLI
Palestra Zend Framework CONAPHP CONISLI
 
Code Igniter & Zend Framework Uma UniãO De Sucesso
Code Igniter & Zend Framework   Uma UniãO De SucessoCode Igniter & Zend Framework   Uma UniãO De Sucesso
Code Igniter & Zend Framework Uma UniãO De Sucesso
 
Aplicações Profissionais para Internet com Zend Framework
Aplicações Profissionais para Internet com Zend FrameworkAplicações Profissionais para Internet com Zend Framework
Aplicações Profissionais para Internet com Zend Framework
 
MVC com Zend Framework
MVC com Zend FrameworkMVC com Zend Framework
MVC com Zend Framework
 
MVC & Zend Framework
MVC & Zend FrameworkMVC & Zend Framework
MVC & Zend Framework
 
Conhecendo o Zend Framework
Conhecendo o Zend FrameworkConhecendo o Zend Framework
Conhecendo o Zend Framework
 
Palestra Zend Framework no Governo Federal
Palestra Zend Framework  no Governo FederalPalestra Zend Framework  no Governo Federal
Palestra Zend Framework no Governo Federal
 
Palestra Zend Framework CISL 2012 - ZF no Governo Federal
Palestra Zend Framework CISL 2012 - ZF no Governo FederalPalestra Zend Framework CISL 2012 - ZF no Governo Federal
Palestra Zend Framework CISL 2012 - ZF no Governo Federal
 
Introducao ao PHP @edgarsandi
Introducao ao PHP @edgarsandiIntroducao ao PHP @edgarsandi
Introducao ao PHP @edgarsandi
 
Modernizando projetos legados usando APIs
Modernizando projetos legados usando APIsModernizando projetos legados usando APIs
Modernizando projetos legados usando APIs
 
.NET 2015, ASP.NET 5, C# 6 e tudo mais
.NET 2015, ASP.NET 5, C# 6 e tudo mais.NET 2015, ASP.NET 5, C# 6 e tudo mais
.NET 2015, ASP.NET 5, C# 6 e tudo mais
 
O que esperar do framework Laminas
O que esperar do framework LaminasO que esperar do framework Laminas
O que esperar do framework Laminas
 
Slides da palestra no Flex mania 2011
Slides da palestra no Flex mania 2011Slides da palestra no Flex mania 2011
Slides da palestra no Flex mania 2011
 
Produtividade com ZF2, PDT & Zend Server Free Edition
Produtividade com ZF2, PDT & Zend Server Free EditionProdutividade com ZF2, PDT & Zend Server Free Edition
Produtividade com ZF2, PDT & Zend Server Free Edition
 
O que esperar do Zend Framework 2
O que esperar do Zend Framework 2O que esperar do Zend Framework 2
O que esperar do Zend Framework 2
 
Construção e provisionamento de ambientes de desenvolvimento virtualizados
Construção e provisionamento de ambientes  de desenvolvimento virtualizadosConstrução e provisionamento de ambientes  de desenvolvimento virtualizados
Construção e provisionamento de ambientes de desenvolvimento virtualizados
 
Mini Curso Zend Framework
Mini Curso Zend FrameworkMini Curso Zend Framework
Mini Curso Zend Framework
 
Computação em Nuvem com PHP usando Zend Framework
Computação em Nuvem com PHP usando Zend FrameworkComputação em Nuvem com PHP usando Zend Framework
Computação em Nuvem com PHP usando Zend Framework
 
Apresentação Flisol 2016
Apresentação Flisol 2016Apresentação Flisol 2016
Apresentação Flisol 2016
 
Desmistificando o Framework da Zend
Desmistificando o Framework da ZendDesmistificando o Framework da Zend
Desmistificando o Framework da Zend
 

Más de Flávio Lisboa

Criando testes integrados de APIs com PHP
Criando testes integrados de APIs com PHPCriando testes integrados de APIs com PHP
Criando testes integrados de APIs com PHPFlávio Lisboa
 
Cooperativas de Software Livre: Uma comparação entre Brasil e Argentina
Cooperativas de Software Livre: Uma comparação entre Brasil e ArgentinaCooperativas de Software Livre: Uma comparação entre Brasil e Argentina
Cooperativas de Software Livre: Uma comparação entre Brasil e ArgentinaFlávio Lisboa
 
Aprenda a afiar suas garras com Laminas
Aprenda a afiar suas garras com LaminasAprenda a afiar suas garras com Laminas
Aprenda a afiar suas garras com LaminasFlávio Lisboa
 
Ciência e software livre: desenvolvendo com método
Ciência e software livre: desenvolvendo com métodoCiência e software livre: desenvolvendo com método
Ciência e software livre: desenvolvendo com métodoFlávio Lisboa
 
Turbinando microsserviços em PHP
Turbinando microsserviços em PHPTurbinando microsserviços em PHP
Turbinando microsserviços em PHPFlávio Lisboa
 
PHP Conference Brazil - What can we expect about framework Laminas?
PHP Conference Brazil - What can we expect about framework Laminas?PHP Conference Brazil - What can we expect about framework Laminas?
PHP Conference Brazil - What can we expect about framework Laminas?Flávio Lisboa
 
Algoritmos Genéticos em PHP - PHP Conference Brasil 2019
Algoritmos Genéticos em PHP - PHP Conference Brasil 2019Algoritmos Genéticos em PHP - PHP Conference Brasil 2019
Algoritmos Genéticos em PHP - PHP Conference Brasil 2019Flávio Lisboa
 
Criando microsserviços em PHP
Criando microsserviços em PHPCriando microsserviços em PHP
Criando microsserviços em PHPFlávio Lisboa
 
Como se tornar o pior programador PHP do mundo
Como se tornar o pior programador PHP do mundoComo se tornar o pior programador PHP do mundo
Como se tornar o pior programador PHP do mundoFlávio Lisboa
 
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHP
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHPA demanda da santa entrega Batman: bugs e gargalos em aplicações PHP
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHPFlávio Lisboa
 
Comunicação e padrões em código aberto: quando convergente e divergente cooperam
Comunicação e padrões em código aberto: quando convergente e divergente cooperamComunicação e padrões em código aberto: quando convergente e divergente cooperam
Comunicação e padrões em código aberto: quando convergente e divergente cooperamFlávio Lisboa
 
Criação de robôs em PHP para raspagem de dados
Criação de robôs em PHP para raspagem de dadosCriação de robôs em PHP para raspagem de dados
Criação de robôs em PHP para raspagem de dadosFlávio Lisboa
 
Estudo de Caso: Utilização de PHP no Serviço Federal de Processamento de Dados
Estudo de Caso: Utilização de PHP no Serviço Federal de Processamento de DadosEstudo de Caso: Utilização de PHP no Serviço Federal de Processamento de Dados
Estudo de Caso: Utilização de PHP no Serviço Federal de Processamento de DadosFlávio Lisboa
 
Arquitetura PHP para um mundo orientado a microsserviços
Arquitetura PHP para um mundo orientado a microsserviçosArquitetura PHP para um mundo orientado a microsserviços
Arquitetura PHP para um mundo orientado a microsserviçosFlávio Lisboa
 
Semeando Liberdade: Como (e onde) o software livre inclui as pessoas
Semeando Liberdade: Como (e onde) o software livre inclui as pessoasSemeando Liberdade: Como (e onde) o software livre inclui as pessoas
Semeando Liberdade: Como (e onde) o software livre inclui as pessoasFlávio Lisboa
 
O que é programação de computadores
O que é programação de computadoresO que é programação de computadores
O que é programação de computadoresFlávio Lisboa
 
Economia em rede (comunidade)
Economia em rede (comunidade)Economia em rede (comunidade)
Economia em rede (comunidade)Flávio Lisboa
 
Aplicações Corporativas em PHP (CRM e ERP)
Aplicações Corporativas em PHP (CRM e ERP)Aplicações Corporativas em PHP (CRM e ERP)
Aplicações Corporativas em PHP (CRM e ERP)Flávio Lisboa
 
Desenvolvimento Orientado a API (e extraindo existentes com PHP)
Desenvolvimento Orientado a API (e extraindo existentes com PHP)Desenvolvimento Orientado a API (e extraindo existentes com PHP)
Desenvolvimento Orientado a API (e extraindo existentes com PHP)Flávio Lisboa
 

Más de Flávio Lisboa (20)

Criando testes integrados de APIs com PHP
Criando testes integrados de APIs com PHPCriando testes integrados de APIs com PHP
Criando testes integrados de APIs com PHP
 
Cooperativas de Software Livre: Uma comparação entre Brasil e Argentina
Cooperativas de Software Livre: Uma comparação entre Brasil e ArgentinaCooperativas de Software Livre: Uma comparação entre Brasil e Argentina
Cooperativas de Software Livre: Uma comparação entre Brasil e Argentina
 
Aprenda a afiar suas garras com Laminas
Aprenda a afiar suas garras com LaminasAprenda a afiar suas garras com Laminas
Aprenda a afiar suas garras com Laminas
 
Ciência e software livre: desenvolvendo com método
Ciência e software livre: desenvolvendo com métodoCiência e software livre: desenvolvendo com método
Ciência e software livre: desenvolvendo com método
 
Turbinando microsserviços em PHP
Turbinando microsserviços em PHPTurbinando microsserviços em PHP
Turbinando microsserviços em PHP
 
PHP Conference Brazil - What can we expect about framework Laminas?
PHP Conference Brazil - What can we expect about framework Laminas?PHP Conference Brazil - What can we expect about framework Laminas?
PHP Conference Brazil - What can we expect about framework Laminas?
 
Algoritmos Genéticos em PHP - PHP Conference Brasil 2019
Algoritmos Genéticos em PHP - PHP Conference Brasil 2019Algoritmos Genéticos em PHP - PHP Conference Brasil 2019
Algoritmos Genéticos em PHP - PHP Conference Brasil 2019
 
Criando microsserviços em PHP
Criando microsserviços em PHPCriando microsserviços em PHP
Criando microsserviços em PHP
 
Como se tornar o pior programador PHP do mundo
Como se tornar o pior programador PHP do mundoComo se tornar o pior programador PHP do mundo
Como se tornar o pior programador PHP do mundo
 
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHP
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHPA demanda da santa entrega Batman: bugs e gargalos em aplicações PHP
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHP
 
Comunicação e padrões em código aberto: quando convergente e divergente cooperam
Comunicação e padrões em código aberto: quando convergente e divergente cooperamComunicação e padrões em código aberto: quando convergente e divergente cooperam
Comunicação e padrões em código aberto: quando convergente e divergente cooperam
 
Criação de robôs em PHP para raspagem de dados
Criação de robôs em PHP para raspagem de dadosCriação de robôs em PHP para raspagem de dados
Criação de robôs em PHP para raspagem de dados
 
Amanhecer esmeralda
Amanhecer esmeraldaAmanhecer esmeralda
Amanhecer esmeralda
 
Estudo de Caso: Utilização de PHP no Serviço Federal de Processamento de Dados
Estudo de Caso: Utilização de PHP no Serviço Federal de Processamento de DadosEstudo de Caso: Utilização de PHP no Serviço Federal de Processamento de Dados
Estudo de Caso: Utilização de PHP no Serviço Federal de Processamento de Dados
 
Arquitetura PHP para um mundo orientado a microsserviços
Arquitetura PHP para um mundo orientado a microsserviçosArquitetura PHP para um mundo orientado a microsserviços
Arquitetura PHP para um mundo orientado a microsserviços
 
Semeando Liberdade: Como (e onde) o software livre inclui as pessoas
Semeando Liberdade: Como (e onde) o software livre inclui as pessoasSemeando Liberdade: Como (e onde) o software livre inclui as pessoas
Semeando Liberdade: Como (e onde) o software livre inclui as pessoas
 
O que é programação de computadores
O que é programação de computadoresO que é programação de computadores
O que é programação de computadores
 
Economia em rede (comunidade)
Economia em rede (comunidade)Economia em rede (comunidade)
Economia em rede (comunidade)
 
Aplicações Corporativas em PHP (CRM e ERP)
Aplicações Corporativas em PHP (CRM e ERP)Aplicações Corporativas em PHP (CRM e ERP)
Aplicações Corporativas em PHP (CRM e ERP)
 
Desenvolvimento Orientado a API (e extraindo existentes com PHP)
Desenvolvimento Orientado a API (e extraindo existentes com PHP)Desenvolvimento Orientado a API (e extraindo existentes com PHP)
Desenvolvimento Orientado a API (e extraindo existentes com PHP)
 

Zend_Db orientado a objetos

  • 1. Desenvolvendo em Zend Framework Ênfase no Zend_Db   www.fgsl.eti.br   Permitida a livre reprodução e cópia desde que citada a fonte
  • 2. FLÁVIO GOMES DA SILVA LISBOA BACHAREL EM CIÊNCIA DA COMPUTAÇÃO ANALISTA DE DESENVOLVIMENTO DE SISTEMAS SERVIÇO FEDERAL DE PROCESSAMENTO DE DADOS (SERPRO) ELABOROU O PROGRAMA DE TREINAMENTO EM PHP DA EMPRESA É AUTOR DO LIVRO ZEND FRAMEWORK DESENVOLVENDO EM PHP 5 ORIENTADO A OBJETOS COM MVC    
  • 3. Desenvolvendo em Zend Framework Nossa Agenda: O desenvolvimento de uma aplicação em PHP com acesso a banco de dados utilizando o editor Eclipse com plugin PDT e a biblioteca de classes Zend Framework.    
  • 4. Desenvolvendo em Zend Framework Arsenal Mínimo: Apache 2.2.3 + com mod_rewrite PHP 5.1.4 + Zend Framework 1.5.0 + Eclipse 3.3.2 Plugin PDT 1.0.3 Multiplataforma: Linux/Windows    
  • 5. Desenvolvendo em Zend Framework Usaremos aqui: Apache 2.2.9 + com mod_rewrite PHP 5.2.6 + Zend Framework 1.6.2 Eclipse 3.3.2 Plugin PDT 1.0.3 MySQL 5.0.67 Sistema operacional: Ubuntu    
  • 6. Desenvolvendo em Zend Framework Por que não Eclipse 3.4? Aguarde PDT 2.0, uma nova versão para um novo ano!    
  • 7. Desenvolvendo em Zend Framework Editando um arquivo PHP no Eclipse    
  • 8. Desenvolvendo em Zend Framework Editando um arquivo PHP no Eclipse Auto-complete (plugin PDT): ●Ativado pela digitação (forçado pelas teclas CTRL + barra de espaços); ●Filtro dinâmico por texto parcial; ●Mostra descrição, parâmetros e valor de retorno; ●Templates de blocos de código (if, while, for, function).    
  • 9. Desenvolvendo em Zend Framework Editando um arquivo PHP no Eclipse Auto-complete - Vantagens: ● Acelera a digitação; ● Evita erros de sintaxe; ● Provê acesso rápido a informações básicas sobre funções; ● Reproduz inclusive as estruturas criadas pelo usuário, como variáveis e classes.    
  • 10. Desenvolvimento Rápido com Zend Framework e Eclipse Editando um arquivo PHP no Eclipse Teclas úteis: ●Localizar/Substituir: CTRL+F ●Ir para uma linha: CTRL+L ●Completar a palavra: ALT + / ●Busca/Abertura rápida de arquivo, mesmo oculto: SHIFT+CTRL+R Para exibir as linhas do arquivo: na barra à esquerda do editor marque Show Line Numbers    
  • 11. Desenvolvimento Rápido com Zend Framework e Eclipse Janelas Úteis: ●PHP Explorer: Árvore hierárquica do projeto. ●Outline: Navegação rápida dos componentes do arquivo selecionado. ●PHP Project Outline: Navegação rápida por todos os componentes do projeto. ●PHP Functions: Referência da linguagem.    
  • 12. Desenvolvimento Rápido com Zend Framework e Eclipse PHP em mãos erradas Sinestro created by John Broome and Gil Kane  in 1961 DC Comics All Rights Reserved    
  • 13. Desenvolvimento Rápido com Zend Framework e Eclipse Programador PHP Tradicional Green Lantern Hal  Jordan created by John  Brorome and Gil Kane in  1959 DC Comics All Rights  Reserved    
  • 14. Desenvolvimento Rápido com Zend Framework e Eclipse Programador PHP Eventual Daffy Duck  created by  Tex Avery and Bob  Campett in 1937 Warner Brothers All  Rights Reserved    
  • 15. Desenvolvimento Rápido com Zend Framework e Eclipse Programador PHP Ideal Rom created by Dankman,  Richard and McCoy in 1979 Hasbro All Rights Reserved    
  • 16. Zend Framework Desenvolvimento Rápido com Zend Framework e Eclipse Biblioteca de classes PHP ●Software livre e gratuito (licença amigável); ●Reutilizável; ●Extensível; ●Flexível; ●Simples; ●Evolução constante; ●Parceiros importantes;    
  • 17. Desenvolvimento Rápido com Zend Framework e Eclipse Zend Framework: Arquitetura Dengeki  Sentai  Changeman.  Toei, 1985.  Company All  Rights  Reserved.    
  • 18. Desenvolvendo em Zend Framework Zend Framework: Arquitetura ●Autenticação e Autorização ●Bancos de Dados ●Diagnóstico e Manutenção ●Filtragem e Validação ●Formulários Dinâmicos ●Infra-estrutura    
  • 19. Desenvolvendo em Zend Framework Zend Framework: Arquitetura ●Internacionalização ●Mail ●Model-View-Controller (MVC) ●Performance ●Busca ●Segurança ●Web Services    
  • 20. Desenvolvimento Rápido com Zend Framework e Eclipse Zend Framework: Arquitetura Firestorm created by Gery Conway and Al Milgrom in 1978 DC Comics All Rights Reserved    
  • 21. Desenvolvendo em Zend Framework O que precisa ser configurado? O arquivo httpd.conf do Apache, se for usado o MVC do ZF (nosso caso). O arquivo php.ini com a extensão do banco de dados a ser utilizado (neste caso, pdo_mysql) se o PHP já não tiver sido compilado com ela.    
  • 22. Desenvolvendo em Zend Framework httpd.conf 1: Configuração da permissão de sobrescrita das configurações do httpd.conf por arquivos .htaccess <Directory "[caminho definido em DocumentRoot"> Options FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory>    
  • 23. Desenvolvendo em Zend Framework httpd.conf 2: Os módulos: seção Dynamic Shared Object (DSO) Support LoadModule rewrite_module modules/mod_rewrite.so    
  • 24. Desenvolvendo em Zend Framework    
  • 25. Desenvolvendo em Zend Framework Vamos fazer uma aplicação em três tempos (ou três camadas)? Demorou!    
  • 26. Desenvolvendo em Zend Framework Zend_DB Uma viagem, da abstração da conexão até um acesso ao banco de dados totalmente orientado a objetos. E um passeio por vários padrões de projeto!    
  • 27. Desenvolvendo em Zend Framework Componente da vez: Zend_Db_Adapter Provê classes adaptadoras para as seguintes marcas de bancos de dados: E COMO  ●Firebird FUNCIONA,  ●IBM DB2 HEIN? ●Interbase ●MySQL ●Microsoft SQL Server Energizer created  ●Oracle by Louise Simonson ●PostgreSQL and June Brigman in 1984 ●SQLite Marvel Comics  All RightsReserved    
  • 28. Desenvolvendo em Zend Framework Você pode usar o construtor! require_once('Zend/Db/Adapter/Pdo/Mysql.php'); $db = new Zend_Db_Adapter_Pdo_Mysql(array( 'host'  => '127.0.0.1', 'username'  => 'usuario', 'password'  => '12345', 'dbname'  => 'escola' ));    
  • 29. Desenvolvendo em Zend Framework Você pode usar o padrão Factory! require_once('Zend/Db.php'); /* Carrega automaticamente a classe  Zend_Db_Adapter_Pdo_Mysql  *  e cria uma instância dela. */ $db = Zend_Db::factory('Pdo_Mysql', array( 'host'  => '127.0.0.1', 'username'  => 'usuario', 'password'  => '12345', 'dbname' => 'escola' ));    
  • 30. Desenvolvendo em Zend Framework Você pode usar sua classe adaptadora! require_once('Zend/Db.php'); /* Carrega automaticamente a classe  MyProject_Db_Adapter_Pdo_Mysql e cria uma instância dela. */ $db = Zend_Db::factory('Pdo_Mysql', array( 'host' => '127.0.0.1', 'username' => 'usuario', 'password' => '12345', 'dbname' => 'escola', 'adapterNamespace' => 'MyProject_Db_Adapter' ));    
  • 31. Desenvolvendo em Zend Framework Você pode usar Zend_Config com Zend_Db! require_once('Zend/Db.php'); require_once('Zend/Config.php'); $config = new Zend_Config( array( 'database' => array( 'adapter'  => 'Mysqli', 'params'  => array( 'dbname'  => 'escola', 'username' => 'usuario', 'password' => '12345', 'host' => '127.0.0.1' ) ) ) ); $db = Zend_Db::factory($config­>database);    
  • 32. Desenvolvendo em Zend Framework Você pode usar Zend_Config com Zend_Db! Ainda podemos carregar a configuração do banco de um arquivo externo, usando as classes filhas de Zend_Config: Zend_Config_Ini e Zend_Config_Xml    
  • 33. Desenvolvendo em Zend Framework Zend_Config_Ini, com sua simplicidade: Arquivo config.ini [database] db.adapter = PDO_MYSQL db.config.username = usuario db.config.password = 12345 db.config.host = 127.0.0.1 db.config.dbname = escola    
  • 34. Desenvolvendo em Zend Framework Zend_Config_Ini, com sua simplicidade: require_once('Zend/Db.php'); require_once('Zend/Config/Ini.php'); $config = new  Zend_Config_Ini('config.ini','database'); $db = Zend_Db::factory( $config­>db­>adapter, $config­>db­>config­>toArray() );     
  • 35. Desenvolvendo em Zend Framework Zend_Config_Xml, com sua versatilidade: Arquivo config.xml <?xml version="1.0"?> <configdata>     <production>         <webhost>www.escola.com</webhost>             <db>             <adapter>pdo_mysql</adapter>             <config>                 <host>db.escola.com</host>                 <username>pro_user</username>                 <password>pro_secret</password>                 <dbname>escola</dbname>             </config>             </db>     </production>     <development extends="production">          <db>             <config>                 <host>127.0.0.1</host>                 <username>usuario</username>                 <password>12345</password>             </config>             </db>       </development>   </configdata>
  • 36. Desenvolvendo em Zend Framework Zend_Config_Xml, com sua versatilidade: require_once('Zend/Db.php'); require_once('Zend/Config/Xml.php'); $config = new  Zend_Config_Xml('config.xml','development'); $db = Zend_Db::factory( $config­>db­>adapter, $config­>db­>config­>toArray() );     
  • 37. Desenvolvendo em Zend Framework A CONEXÃO COM O BANCO É IMEDIATA? Você quer saber se na hora em que criar a instância de Zend_Db será feita a conexão e um atributo protegido em algum lugar receberá um tipo resource? A resposta é NÃO. A conexão é feita sob demanda, a partir da primeira consulta ao banco. Para forçar a conexão, use o método getConnection()    
  • 38. Desenvolvendo em Zend Framework Obtendo registros na forma de matrizes com o método fetchAll()   $sql = 'SELECT * from alunos WHERE id > ?'; $registros = $db­>fetchAll($sql,array(2));    
  • 39. Desenvolvendo em Zend Framework Obtendo registros na forma de matrizes com o método fetchAll() O resultado de fetchAll() por padrão é uma matriz de duas dimensões, onde a primeira equivale aos registros e a segunda aos campos. Na segunda, as chaves dos elementos são os nomes dos campos, se nada for dito em contrário. Esse último detalhe pode ser configurado com o método setFetchMode(), usando as constantes Zend_Db::FETCH...    
  • 40. Desenvolvendo em Zend Framework Obtendo somente a primeira coluna de uma consulta Se quiser somente a primeira coluna de uma consulta (o primeiro campo especificado na consulta, ou o primeiro definido na tabela), use o método fetchCol(). Ele retornará uma matriz uma dimensão. Para cada elemento, a chave é o número ordinal do registro na consulta (não na tabela) e o valor é conteúdo do campo.    
  • 41. Desenvolvendo em Zend Framework Obtendo somente a primeira linha de uma consulta Se quiser somente a primeira linha de uma consulta (o primeiro registro retornado pela mesma), use o método fetchRow(). Ele retornará uma matriz com uma dimensão. Para cada elemento, a chave é o nome (ou o ordinal) do campo e o valor é o conteúdo do mesmo.    
  • 42. Desenvolvendo em Zend Framework Inclusão de registros $data = array( "nome" => 'Peninha' );  $db­>insert('alunos',$data);    
  • 43. Desenvolvendo em Zend Framework Pergunta: E se ao invés de colocar um valor diretamente, eu queira atribuir ao campo o valor de retorno de uma função do banco? SEM PROBLEMAS! Use uma instância de Zend_Db_Expr e passe a função como parâmetro para o construtor. <?php $data = array( 'created_on' => new Zend_Db_Expr('CURDATE()'), 'bug_description' => 'Something wrong', 'bug_status' => 'NEW' );     $db­>insert('bugs', $data);
  • 44. Desenvolvendo em Zend Framework Pergunta: E se eu quiser saber qual o id do registro incluído? Use a função getLastInsertId()    
  • 45. Desenvolvendo em Zend Framework Atualização de registros: $data = array( "nome" => 'Gansolino' );  $where = $db­>quoteInto('nome  = ?','Peninha'); $db­>update('alunos',$data,$where);    
  • 46. Desenvolvendo em Zend Framework Remoção de registros: $where = $db­>quoteInto('nome  = ?','Gansolino'); $db­>delete('alunos',$where);    
  • 47. Desenvolvendo em Zend Framework O problema dos campos de texto O conteúdo de campos do tipo texto em SQL é cerceado por apóstrofos. Como isso pode gerar uma confusão com os apóstrofos, a classe Zend_Db fornece o método quote(), que envolve o texto com os mesmos.    
  • 48. Desenvolvendo em Zend Framework Controle de Transações <?php $db­>beginTransaction(); try { $db­>query(...); $db­>commit(); } catch (Exception $e) { $db­>rollBack(); echo $e­>getMessage(); }    
  • 49. Desenvolvendo em Zend Framework Informações sobre as Tabelas $lista = $db­>listTables(); foreach($lista as $table) { echo "<h1>Tabela $table</h1>"; $campos = $db­>describeTable($table); foreach ($campos as $nome => $dados) { echo "<p><b>$nome</b><br>"; foreach ($dados as $chave => $valor) { echo "$chave = $valor<br>"; } echo '</p>';   }   }
  • 50. Desenvolvendo em Zend Framework Encerrando a Conexão Normalmente não é necessário fechar uma conexão de banco de dados. PHP automaticamente elimina todos os recursos e finaliza uma requisição. Extensões de bancos de dados são desenhadas para fechar a conexão assim que a referência para o objeto de recurso seja eliminada.    
  • 51. Desenvolvendo em Zend Framework Encerrando a Conexão $db­>closeConnection();    
  • 52. Desenvolvendo em Zend Framework Declarações: para quê servem? RECUPERAR  TUDO? NÃO, UM  REGISTRO  DE CADA  VEZ! Green Arrow created  by Mort Weisinger and George Papp in 1941   DC Comics    All RightsReserved
  • 53. Desenvolvendo em Zend Framework Preparando Declarações SQL com o construtor de Zend_Db_Statement require_once('Zend/Db/Statement.php'); require_once('Zend/Config/Xml.php'); $config = new Zend_Config_Xml('config.xml','development'); $db = Zend_Db::factory($config­>db­>adapter,$config­>db­>config­ >toArray()); $sql = 'SELECT * from alunos WHERE id > ?'; $stmt = new Zend_Db_Statement_Pdo($db,$sql); $stmt­>execute(array(2)); while ($registro = $stmt­>fetch()) { foreach ($registro as $campo => $conteudo) { echo "$campo = $conteudo<br>"; } }    
  • 54. Desenvolvendo em Zend Framework Preparando Declarações SQL com o próprio objeto Zend_Db require_once('Zend/Db/Statement.php'); require_once('Zend/Config/Xml.php'); $config = new Zend_Config_Xml('config.xml','development'); $db = Zend_Db::factory($config­>db­>adapter,$config­>db­>config­ >toArray()); $sql = 'SELECT * from alunos WHERE id > ?'; $stmt = $db­>query($sql,array(2)); $stmt­>execute(); while ($registro = $stmt­>fetch()) { foreach ($registro as $campo => $conteudo) { echo "$campo = $conteudo<br>"; } }    
  • 55. Desenvolvendo em Zend Framework Recupere uma única coluna require_once('Zend/Db/Statement.php'); require_once('Zend/Config/Xml.php'); $config = new Zend_Config_Xml('config.xml','development'); $db = Zend_Db::factory($config­>db­>adapter,$config­>db­>config­ >toArray()); $sql = 'SELECT * from alunos WHERE id > ?'; $stmt = $db­>query($sql,array(2)); $stmt­>execute(); while ($coluna = $stmt­>fetchColumn(1)) { echo "$coluna<br>"; }    
  • 56. Desenvolvendo em Zend Framework Consultas Orientadas a Objetos: Zend_Db_Select $db = Zend_Db::factory($config­>db­>adapter,$config­>db­>config­>toArray()); $select = $db­>select(); $select­>from('alunos'); $select­>where('id > ?',2); $select­>order('nome'); $stmt = $select­>query(); $stmt­>execute(); while ($registro = $stmt­>fetch()) { echo '<p>'; foreach ($registro as $campo => $conteudo) { echo "$campo = $conteudo<br>"; } echo '</p>'; }    
  • 57. Desenvolvendo em Zend Framework NÃO! TEM A  E EU TENHO INTERFACE  QUE FLUENTE! ESCREVER DESSE JEITO? Kingpinr created  by Stan Lee and John Spiderman created  Romita Sr. in by Stan Lee 1967 and Steve Ditko in Marvel Comics  1962 All Rights Marvel Comics  Reserved All RightsReserved    
  • 58. Desenvolvendo em Zend Framework Zend_Db_Select: Interface Fluente require_once('Zend/Db.php'); require_once('Zend/Config/Xml.php'); $config = new Zend_Config_Xml('config.xml','development'); $db = Zend_Db::factory($config­>db­>adapter,$config­>db­>config­>toArray() ); $select = $db­>select(); $select­>from('alunos')­>where('id > ?',2)­>order('nome'); $stmt = $select­>query(); $stmt­>execute(); while ($registro = $stmt­>fetch()) { echo '<p>'; foreach ($registro as $campo => $conteudo) { echo "$campo = $conteudo<br>"; }   echo '</p>';   }
  • 59. Desenvolvendo em Zend Framework Zend_Db_Select: Obtendo a expressão SQL require_once('Zend/Db.php'); require_once('Zend/Config/Xml.php'); $config = new  Zend_Config_Xml('config.xml','development'); $db = Zend_Db::factory( $config­>db­>adapter, $config­>db­>config­>toArray() ); $select = $db­>select(); $select­>from('alunos')­>where('id > ?',2)­ >order('nome'); echo $select­>__toString();    
  • 60. Desenvolvendo em Zend Framework Tabelas como Objetos: Zend_Db_Table É A  IMPLEMENTAÇÃO  DO GATEWAY DE  TABELA DE DADOS! Green Lantern Alan Scott created by Bill Finger and Martin Nodell in 1940 DC Comics     All RightsReserved
  • 61. Desenvolvendo em Zend Framework Zend_Db_Table : Criando o Modelo <?php require_once('Zend/Db/Table.php'); class Alunos extends Zend_Db_Table { protected $_name = 'alunos'; } ?>    
  • 62. Desenvolvendo em Zend Framework Zend_Db_Table : Usando o Modelo para Recuperar Registros require_once('Zend/Db.php'); require_once('Zend/Config/Xml.php'); require_once('Alunos.php'); $config = new Zend_Config_Xml('config.xml','development'); $db = Zend_Db::factory($config­>db­>adapter,$config­>db­config­ >toArray()); Zend_Db_Table_Abstract::setDefaultAdapter($db); $alunos = new Alunos(); $where = $alunos­>getDefaultAdapter()­>quoteInto('id > ?',2); $registros = $alunos­>fetchAll($where,'nome');    
  • 63. Desenvolvendo em Zend Framework Zend_Db_Table : Usando o Modelo para Recuperar Registros foreach($registros as $registro) { echo '<p>'; foreach ($registro­>toArray() as $campo => $conteudo) { echo "$campo = $conteudo<br>"; } echo '</p>'; }    
  • 64. Desenvolvendo em Zend Framework Zend_Db_Table : Incluindo registros require_once('Zend/Db.php'); require_once('Zend/Config/Xml.php'); require_once('Alunos.php'); $config = new Zend_Config_Xml('config.xml','development'); $db = Zend_Db::factory( $config­>db­>adapter, $config­>db­>config­>toArray() ); Zend_Db_Table_Abstract::setDefaultAdapter($db); $alunos = new Alunos(); $data = array( "nome" => 'Urtigão' ); $alunos­>insert($data);    
  • 65. Desenvolvendo em Zend Framework Zend_Db_Table : Atualizando registros require_once('Zend/Db.php'); require_once('Zend/Config/Xml.php'); require_once('Alunos.php'); $config = new Zend_Config_Xml('config.xml','development'); $db = Zend_Db::factory( $config­>db­>adapter, $config­>db­>config­>toArray() ); Zend_Db_Table_Abstract::setDefaultAdapter($db); $alunos = new Alunos(); $data = array( "nome" => 'Vovó Donalda' ); $where = $alunos­>getAdapter()­>quoteInto('id = ?',14);     $alunos­>update($data,$where);
  • 66. Desenvolvendo em Zend Framework Zend_Db_Table : Apagando registros require_once('Zend/Db.php'); require_once('Zend/Config/Xml.php'); require_once('Alunos.php'); $config = new Zend_Config_Xml('config.xml','development'); $db = Zend_Db::factory( $config­>db­>adapter, $config­>db­>config­>toArray() ); Zend_Db_Table_Abstract::setDefaultAdapter($db); $alunos = new Alunos(); $data = array( "nome" => 'Vovó Donalda' ); $where = $alunos­>getAdapter()­>quoteInto('id = ?',15);     $alunos­>delete($where);
  • 67. Desenvolvendo em Zend Framework Conjuntos de Linhas como Objetos: Zend_Db_Rowset É A  IMPLEMENTAÇÃO  DO GATEWAY DE  LINHAS DE DADOS!    
  • 68. Desenvolvendo em Zend Framework Zend_Db_Rowset a partir de Zend_Db_Table As consultas feitas com os métodos fetchAll() e find() retornam objetos Zend_Db_Rowset. O método find() faz buscas diretamente pela chave primária. Se um valor simples for passado como parâmetro, ele retorna um objeto Zend_Db_Rowset com somente um objeto Zend_Db_Row. Se for passado uma matriz de valores, serão retornados tantos objetos Zend_Db_Row quantos os cujas chaves primárias combinarem com as da matriz.    
  • 69. Desenvolvendo em Zend Framework Linhas como Objetos: Zend_Db_Row $alunos = new Alunos(); $where = $alunos­>getDefaultAdapter()­>quoteInto('id > ?',2); $registros = $alunos­>fetchAll($where,'nome'); while ($registro = $registros­>current()) { echo '<p>'; foreach ($registro­>toArray() as $campo => $conteudo) { echo "$campo = $conteudo<br>"; } echo '</p>'; $registros­>next(); } OPA, TEM UM PADRÃO ITERATOR AQUI!    
  • 70. Desenvolvendo em Zend Framework Linhas como Objetos: Zend_Db_Row TÁ, MAS PRA  QUE SERVE  AFINAL ESSE  ZEND_DB_ROW? The Thing created by Stan Lee and Jack Kirby in 1961 Marvel Comics     All RightsReserved
  • 71. Desenvolvendo em Zend Framework Zend_Db_Row: Objetos Persistentes require_once('Zend/Db.php'); require_once('Zend/Config/Xml.php'); require_once('Alunos.php'); $config = new Zend_Config_Xml('config.xml','development'); $db = Zend_Db::factory($config­>db­>adapter,$config­>db­>config­ >toArray()); Zend_Db_Table_Abstract::setDefaultAdapter($db); $alunos = new Alunos(); $where = $alunos­>getDefaultAdapter()­>quoteInto('nome = ?','zico'); $registro = $alunos­>fetchRow($where); $registro­>nome = 'zeca'; $registro­>save();   OPA, MAS ESSE É O PADRAO ACTIVE RECORD!  
  • 72. Desenvolvendo em Zend Framework Zend_Db_Row: Criar Objetos = Incluir Registros require_once('Zend/Db.php'); require_once('Zend/Config/Xml.php'); require_once('Alunos.php'); $config = new Zend_Config_Xml('config.xml','development'); $db = Zend_Db::factory( $config­>db­>adapter, $config­>db­>config­>toArray() ); Zend_Db_Table_Abstract::setDefaultAdapter($db); $alunos = new Alunos(); $registro = $alunos­>createRow(); $registro­>nome = 'Chiquinho'; $registro­>save();    
  • 73. Desenvolvendo em Zend Framework Zend_Db_Row: O Objeto Apaga o Registro (Ele Mesmo!) require_once('Zend/Db.php'); require_once('Zend/Config/Xml.php'); require_once('Alunos.php'); $config = new Zend_Config_Xml('config.xml','development'); $db = Zend_Db::factory( $config­>db­>adapter, $config­>db­>config­>toArray() ); Zend_Db_Table_Abstract::setDefaultAdapter($db); $alunos = new Alunos(); $registro = $alunos­>fetchRow("nome = 'Chiquinho'"); $registro­>delete();    
  • 74. Desenvolvendo em Zend Framework Zend_Db_Row: E se os dados mudarem? Quando o objeto Zend_Db_Row é recuperado através de uma consulta, ele retorna com os dados do banco naquele momento. Atualizações no banco não são propagadas automaticamente para o objeto. Para carregar o objeto com os dados atualizados, use o método refresh().    
  • 75. Desenvolvendo em Zend Framework Monitore as Operações do Banco $profiler = $db­>getProfiler(); Isso retorna uma instância de objeto Zend_Db_Profiler. Com essa instância, o desenvolvedor pode examinar suas consultas usando uma variedade de métodos: getTotalNumQueries() retorna o número total de consultas que foram executadas. ● ●getTotalElapsedSecs() retorna o número total de segundos transcorridos para todas as consultas executadas. getQueryProfiles() retorna um vetor de todos os perfis de consulta. ● ●getLastQueryProfile() retorna o último (mais recente) perfil de consulta, não obstante a consulta tenha ou não terminado. (se não tiver, a hora de término será nula)    
  • 76. Desenvolvendo em Zend Framework Monitore as Operações do Banco clear() limpa quaisquer perfis de consulta passados da pilha. ● O valor de retorno de getLastQueryProfile() e os elementos individuais de getQueryProfiles() são objetos Zend_Db_Profiler_Query, que provêem a habilidade de inspecionar as consultas individuais por elas mesmas: ●getQuery() retorna o texto SQL da consulta. O texto SQL de uma declaração preparada com parâmetros é o texto no momento em que a consulta for preparada, assim ela contém espaços reservados para valores de parâmetro, não os valores usados quando a declaração é executada. ● ●getQueryParams() retorna um vetor de valores de parâmetro usados quando executar uma consulta preparada. Isso inclui tanto parâmetros de combinação quanto argumentos para o método execute() de declaração. As chaves do vetor são ●índices de parâmetro posicionais (baseados em 1) ou nomeados (string). ●  getElapsedSecs() retorna o número de segundo que a consulta levou para rodar. ●  
  • 77. Desenvolvendo em Zend Framework Terei que fazer tudo isso? Pode usar o projeto mínimo pra começar, ele está disponível em www.fgsl.eti.br. Lembre-se de que é apenas um dos layouts possíveis para uma aplicação.    
  • 78. Desenvolvendo em Zend Framework Onde encontro ajuda? http://framework.zend.com www.zfbrasil.com Tem um livro também, sabe...    
  • 79. Desenvolvendo em Zend Framework Contato: flaviogomesdasilva@yahoo.com.br FOI UMA  GRANDE  HONRA!