79
 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

Desenvolvimento Com Zend Framework - Zend_Db

Embed Size (px)

Citation preview

Page 1: Desenvolvimento Com Zend Framework - Zend_Db

   

Desenvolvendo em Zend FrameworkÊnfase no Zend_Db

www.fgsl.eti.brPermitida a livre reprodução e cópia desde que citada a fonte

Page 2: Desenvolvimento Com Zend Framework - Zend_Db

   

FLÁVIO GOMES DA SILVA LISBOA

BACHAREL EM CIÊNCIA DA COMPUTAÇÃO

ANALISTA DE DESENVOLVIMENTO DE SISTEMASSERVIÇ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

Page 3: Desenvolvimento Com Zend Framework - Zend_Db

   

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

Page 4: Desenvolvimento Com Zend Framework - Zend_Db

   

Arsenal Mínimo:

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

Multiplataforma: Linux/Windows

Desenvolvendo em Zend Framework

Page 5: Desenvolvimento Com Zend Framework - Zend_Db

   

Usaremos aqui:

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

Sistema operacional: Ubuntu

Desenvolvendo em Zend Framework

Page 6: Desenvolvimento Com Zend Framework - Zend_Db

   

Por que não Eclipse 3.4?

Aguarde PDT 2.0, uma nova versão para um novo ano!

Desenvolvendo em Zend Framework

Page 7: Desenvolvimento Com Zend Framework - Zend_Db

   

Editando um arquivo PHP no Eclipse

Desenvolvendo em Zend Framework

Page 8: Desenvolvimento Com Zend Framework - Zend_Db

   

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

Page 9: Desenvolvimento Com Zend Framework - Zend_Db

   

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.

Desenvolvendo em Zend Framework

Page 10: Desenvolvimento Com Zend Framework - Zend_Db

   

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

Page 11: Desenvolvimento Com Zend Framework - Zend_Db

   

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

Page 12: Desenvolvimento Com Zend Framework - Zend_Db

   

PHP em mãos erradas

Desenvolvimento Rápido com Zend Framework e Eclipse

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

Page 13: Desenvolvimento Com Zend Framework - Zend_Db

   

Programador PHP Tradicional

Desenvolvimento Rápido com Zend Framework e Eclipse

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

Page 14: Desenvolvimento Com Zend Framework - Zend_Db

   

Programador PHP Eventual

Desenvolvimento Rápido com Zend Framework e Eclipse

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

Page 15: Desenvolvimento Com Zend Framework - Zend_Db

   

Programador PHP Ideal

Desenvolvimento Rápido com Zend Framework e Eclipse

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

Page 16: Desenvolvimento Com Zend Framework - Zend_Db

   

Zend Framework

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

Page 17: Desenvolvimento Com Zend Framework - Zend_Db

   

Zend Framework: Arquitetura

Desenvolvimento Rápido com Zend Framework e Eclipse

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

Page 18: Desenvolvimento Com Zend Framework - Zend_Db

   

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

Page 19: Desenvolvimento Com Zend Framework - Zend_Db

   

Zend Framework: Arquitetura

●Internacionalização●Mail●Model-View-Controller (MVC)●Performance●Busca●Segurança●Web Services

Desenvolvendo em Zend Framework

Page 20: Desenvolvimento Com Zend Framework - Zend_Db

   

Zend Framework: Arquitetura

Desenvolvimento Rápido com Zend Framework e Eclipse

Firestorm created byGery Conway andAl Milgrom in 1978DC Comics All RightsReserved

Page 21: Desenvolvimento Com Zend Framework - Zend_Db

   

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

Page 22: Desenvolvimento Com Zend Framework - Zend_Db

   

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

Page 23: Desenvolvimento Com Zend Framework - Zend_Db

   

httpd.conf

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

LoadModule rewrite_module modules/mod_rewrite.so

Desenvolvendo em Zend Framework

Page 24: Desenvolvimento Com Zend Framework - Zend_Db

   

Desenvolvendo em Zend Framework

Page 25: Desenvolvimento Com Zend Framework - Zend_Db

   

Desenvolvendo em Zend Framework

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

Demorou!

Page 26: Desenvolvimento Com Zend Framework - Zend_Db

   

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!

Page 27: Desenvolvimento Com Zend Framework - Zend_Db

   

Desenvolvendo em Zend Framework

Componente da vez: Zend_Db_Adapter

Provê classes adaptadoras para as seguintes marcas de bancos de dados:

●Firebird●IBM DB2●Interbase●MySQL●Microsoft SQL Server●Oracle●PostgreSQL●SQLite

E COMO FUNCIONA, 

HEIN?

Energizer created by Louise Simonsonand June Brigman in1984Marvel Comics All RightsReserved

Page 28: Desenvolvimento Com Zend Framework - Zend_Db

   

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'

));

Page 29: Desenvolvimento Com Zend Framework - Zend_Db

   

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'

));

Page 30: Desenvolvimento Com Zend Framework - Zend_Db

   

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 umainstância dela. */$db = Zend_Db::factory('Pdo_Mysql', array(

'host' => '127.0.0.1','username' => 'usuario','password' => '12345','dbname' => 'escola',

'adapterNamespace' => 'MyProject_Db_Adapter'));

Page 31: Desenvolvimento Com Zend Framework - Zend_Db

   

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);

Page 32: Desenvolvimento Com Zend Framework - Zend_Db

   

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

Page 33: Desenvolvimento Com Zend Framework - Zend_Db

   

Desenvolvendo em Zend Framework

Zend_Config_Ini, com sua simplicidade:

Arquivo config.ini

[database]db.adapter = PDO_MYSQLdb.config.username = usuariodb.config.password = 12345db.config.host = 127.0.0.1db.config.dbname = escola

Page 34: Desenvolvimento Com Zend Framework - Zend_Db

   

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()); 

Page 35: Desenvolvimento Com Zend Framework - Zend_Db

   

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>

Page 36: Desenvolvimento Com Zend Framework - Zend_Db

   

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()); 

Page 37: Desenvolvimento Com Zend Framework - Zend_Db

   

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()

Page 38: Desenvolvimento Com Zend Framework - Zend_Db

   

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));

Page 39: Desenvolvimento Com Zend Framework - Zend_Db

   

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...

Page 40: Desenvolvimento Com Zend Framework - Zend_Db

   

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.

Page 41: Desenvolvimento Com Zend Framework - Zend_Db

   

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.

Page 42: Desenvolvimento Com Zend Framework - Zend_Db

   

Desenvolvendo em Zend Framework

Inclusão de registros

$data = array("nome" => 'Peninha'

); $db­>insert('alunos',$data);

Page 43: Desenvolvimento Com Zend Framework - Zend_Db

   

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);

Page 44: Desenvolvimento Com Zend Framework - Zend_Db

   

Desenvolvendo em Zend Framework

Pergunta:

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

Use a função getLastInsertId()

Page 45: Desenvolvimento Com Zend Framework - Zend_Db

   

Desenvolvendo em Zend Framework

Atualização de registros:

$data = array("nome" => 'Gansolino'

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

Page 46: Desenvolvimento Com Zend Framework - Zend_Db

   

Desenvolvendo em Zend Framework

Remoção de registros:

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

Page 47: Desenvolvimento Com Zend Framework - Zend_Db

   

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.

Page 48: Desenvolvimento Com Zend Framework - Zend_Db

   

Desenvolvendo em Zend Framework

Controle de Transações

<?php$db­>beginTransaction();try {$db­>query(...);$db­>commit();

} catch (Exception $e) {$db­>rollBack();echo $e­>getMessage();

}

Page 49: Desenvolvimento Com Zend Framework - Zend_Db

   

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>';

}}

Page 50: Desenvolvimento Com Zend Framework - Zend_Db

   

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.

Page 51: Desenvolvimento Com Zend Framework - Zend_Db

   

Desenvolvendo em Zend Framework

Encerrando a Conexão

$db­>closeConnection();

Page 52: Desenvolvimento Com Zend Framework - Zend_Db

   

Desenvolvendo em Zend Framework

Declarações: para quê servem?

RECUPERAR TUDO?

NÃO, UM REGISTRO DE CADA 

VEZ!Green Arrow created by Mort Weisingerand George Papp in1941DC Comics All RightsReserved

Page 53: Desenvolvimento Com Zend Framework - Zend_Db

   

Desenvolvendo em Zend Framework

Preparando Declarações SQLcom 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>";}

}

Page 54: Desenvolvimento Com Zend Framework - Zend_Db

   

Desenvolvendo em Zend Framework

Preparando Declarações SQLcom 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>";}

}

Page 55: Desenvolvimento Com Zend Framework - Zend_Db

   

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>";}

Page 56: Desenvolvimento Com Zend Framework - Zend_Db

   

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>';

}

Page 57: Desenvolvimento Com Zend Framework - Zend_Db

   

Desenvolvendo em Zend Framework

E EU TENHO QUE

ESCREVER DESSE JEITO?

NÃO! TEM A INTERFACE FLUENTE!

Spiderman created by Stan Leeand Steve Ditko in1962Marvel Comics All RightsReserved

Kingpinr created by Stan Leeand JohnRomita Sr. in1967Marvel Comics All RightsReserved

Page 58: Desenvolvimento Com Zend Framework - Zend_Db

   

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>';

}

Page 59: Desenvolvimento Com Zend Framework - Zend_Db

   

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();

Page 60: Desenvolvimento Com Zend Framework - Zend_Db

   

Desenvolvendo em Zend Framework

Tabelas como Objetos:Zend_Db_Table

É A IMPLEMENTAÇÃO DO GATEWAY DE 

TABELA DE DADOS!

Green Lantern Alan Scottcreated by Bill Fingerand Martin Nodell in1940DC ComicsAll RightsReserved

Page 61: Desenvolvimento Com Zend Framework - Zend_Db

   

Desenvolvendo em Zend Framework

Zend_Db_Table :Criando o Modelo

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

}?>

Page 62: Desenvolvimento Com Zend Framework - Zend_Db

   

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');

Page 63: Desenvolvimento Com Zend Framework - Zend_Db

   

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>';

}

Page 64: Desenvolvimento Com Zend Framework - Zend_Db

   

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);

Page 65: Desenvolvimento Com Zend Framework - Zend_Db

   

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);

Page 66: Desenvolvimento Com Zend Framework - Zend_Db

   

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);

Page 67: Desenvolvimento Com Zend Framework - Zend_Db

   

Desenvolvendo em Zend Framework

Conjuntos de Linhas como Objetos:Zend_Db_Rowset

É A IMPLEMENTAÇÃO DO GATEWAY DE 

LINHAS DE DADOS!

Page 68: Desenvolvimento Com Zend Framework - Zend_Db

   

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.

Page 69: Desenvolvimento Com Zend Framework - Zend_Db

   

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!

Page 70: Desenvolvimento Com Zend Framework - Zend_Db

   

Desenvolvendo em Zend Framework

TÁ, MAS PRA QUE SERVE 

AFINAL ESSE ZEND_DB_ROW?

Linhas como Objetos:Zend_Db_Row

The Thingcreated by Stan Leeand Jack Kirby in1961Marvel ComicsAll RightsReserved

Page 71: Desenvolvimento Com Zend Framework - Zend_Db

   

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!

Page 72: Desenvolvimento Com Zend Framework - Zend_Db

   

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();

Page 73: Desenvolvimento Com Zend Framework - Zend_Db

   

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();

Page 74: Desenvolvimento Com Zend Framework - Zend_Db

   

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().

Page 75: Desenvolvimento Com Zend Framework - Zend_Db

   

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)

Page 76: Desenvolvimento Com Zend Framework - Zend_Db

   

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 degetQueryProfiles() são objetos Zend_Db_Profiler_Query, que provêem a habilidadede 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.

Page 77: Desenvolvimento Com Zend Framework - Zend_Db

   

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.

Page 78: Desenvolvimento Com Zend Framework - Zend_Db

   

Onde encontro ajuda?

http://framework.zend.com

www.zfbrasil.com

Tem um livro também, sabe...

Desenvolvendo em Zend Framework

Page 79: Desenvolvimento Com Zend Framework - Zend_Db

   

Contato: [email protected]

Desenvolvendo em Zend Framework

FOI UMA GRANDE HONRA!