Upload
manuel-lemos
View
1.058
Download
3
Embed Size (px)
DESCRIPTION
Palestra dada por Almir Neto no CONAPHP 2008 - Congresso Nacional de PHP que ocorreu em São Paulo nos dias 18 e 19 de Outubro dentro do CONISLI 2008
Citation preview
Mapeamento objeto-relacional em PHP com PEAR::Data_Object
Almir Neto – [email protected]
CoNaPHP – CONISLI 2008
http://www.conaphp.com.br/
São Paulo, 18 e 19 de Outubro de 2008
Mapeamento objeto-relacional em PHP com PEAR::Data_Object
Grupo de Desenvolvedores PHP de Goiás
● Lista de Discussão● Troca de Conhecimentos● Encontros● Palestras● Eventos● Networking● http://www.gophp.com.br
Mapeamento objeto-relacional em PHP com PEAR::Data_Object
O que é Mapeamento Objeto Relacional?
• “Mapeamento objeto-relacional (ou ORM) é uma técnica de desenvolvimento utilizada para reduzir a impedância da programação orientada a objetos utilizando bancos de dados relacionais. As tabelas do banco de dados são representadas através de classes e os registros de cada tabela são representados como instâncias das classes correspondentes.Com esta técnica, o programador não precisa de se preocupar com os comandos em linguagem SQL; irá usar uma interface de programação simples que faz todo o trabalho de persistência.”
Almir [email protected]
Wikipédia
Mapeamento objeto-relacional em PHP com PEAR::Data_Object
O que é PEAR?• O PEAR (PHP Extension and Aplication Repository) é um
framework e um sistema de distribuição para a codificação de componentes em PHP.
• Mais Informações: http://pear.php.net
Almir [email protected]
Mapeamento objeto-relacional em PHP com PEAR::Data_Object
PEAR::DB_DataObject• Dispensa o uso de SQL para operações CRUD(Create, Read,
Update, Delete)• Portabilidade do Banco de Dados• Facilidade para manipular dados• Velocidade do desenvolvimento• Base de dados sempre documentada• Gera classes PHP com o mapeamento das tabelas• Métodos setters e getters automáticos
Almir [email protected]
Mapeamento objeto-relacional em PHP com PEAR::Data_Object
Arquivo de Configuração• Arquivo .ini
Almir [email protected]
[DB_DataObject]database = mysql://user:pw@host/BDschema_location = /dataobjects/schema/class_location = /dataobjects/require_prefix = /dataobjects/extends_location = DB/DataObject.phpextends = DB_DataObject
• Arrays PHP
Mapeamento objeto-relacional em PHP com PEAR::Data_Object
Gerando as Classes PHP
• Arquivos criados: formato.php, livro.php, revisao.php, cliente.php, BD.ini
Almir [email protected]
$> createTables.php /diretorio/DataObject.ini
Mapeamento objeto-relacional em PHP com PEAR::Data_Object
Classes Geradas
Almir [email protected]
<?php/*** Table Definition for formato*/require_once 'DB/DataObject.php';class Formato extends DB_DataObject{
###START_AUTOCODE/* the code below is auto generated do not remove the above tag */var $__table = 'formato'; // table namevar $formato_id; // int(4) not_null primary_key unique_keyunsigned auto_incrementvar $titulo; // string(40)/* ZE2 compatibility trick*/function __clone() { return $this;}/* Static get */function staticGet($k,$v=NULL)
return DB_DataObject::staticGet('Formato',$k,$v);/* the code above is auto generated do not remove the tag below */###END_AUTOCODE
}?>
Mapeamento objeto-relacional em PHP com PEAR::Data_Object
Arquivo de configuração gerado
Almir [email protected]
[livro]livro_id = 129titulo = 130descricao = 66isbn = 130
[livro__keys]livro_id = N
[cliente]cliente_id = 129nome = 130rua = 2cep = 2cidade = 2
[cliente__keys]cliente_id = N
Mapeamento objeto-relacional em PHP com PEAR::Data_Object
Buscando registros pela chave primária
Almir [email protected]
<?phprequire_once('DB/DataObject.php');require('config.php');
$livro = DB_DataObject::factory('livro');$livro->get(42);
echo 'Este é o livro: '.$livro->titulo;?>
Mapeamento objeto-relacional em PHP com PEAR::Data_Object
Buscando vários registros
Almir [email protected]
<?php$livro = DB_DataObject::factory('livro');$livro->formato_id = 23;$num = $livro->find();$i = 1;
while ($livro->fetch()) {echo "Livro: $i de $num:{$livro->titulo}<br>";$i++;
}?>
Mapeamento objeto-relacional em PHP com PEAR::Data_Object
Adicionando condições
Almir [email protected]
<?php$livro = DB_DataObject::factory('livro');$livro->whereAdd("livro.titulo LIKE 'GOPHP%'");$num = $livro->find();$i = 1;
while ($livro->fetch()) {echo "Livro: $i de $num: {$livro->titulo}<br>";$i++;
}?>
Mapeamento objeto-relacional em PHP com PEAR::Data_Object
Inserindo um registro
Almir [email protected]
<?php
$livro = DB_DataObject::factory('livro');$livro->titulo = 'Software Livre';$livro->formato_id = 23;$livro_id = $livro->insert();
?>
Mapeamento objeto-relacional em PHP com PEAR::Data_Object
Atualizando um registro
Almir [email protected]
<?php
$livro = DB_DataObject::factory('livro');$livro->get(42);
$livro->titulo = 'Software Livre';$livro->update();
?>
Mapeamento objeto-relacional em PHP com PEAR::Data_Object
Deletando um registro
Almir [email protected]
<?php
$livro = DB_DataObject::factory('livro');$livro->get(42);
$livro->delete();
?>
Mapeamento objeto-relacional em PHP com PEAR::Data_Object
Relacionamentos utilizando Join• Arquivo BD.links.ini
Almir [email protected]
[livro]formato_id = formato:formato_id
[revisao]livro_id = livro:livro_idcliente_id = cliente:cliente_id
Mapeamento objeto-relacional em PHP com PEAR::Data_Object
Relacionamentos utilizando Join
Almir [email protected]
<?php$revisao = DB_DataObject::factory('revisao');$cliente = DB_DataObject::factory('cliente');$revisao->livro_id = 4711;$revisao->joinAdd($cliente, 'INNER');$revisao->selectAdd('cliente.nome');$revisao->find();
while ($revisao->fetch()) {echo $revisao->titulo.' (Revisor: '.$revisao->nome.')<br>';echo $revisao->descricao.'<br>';
}?>
Mapeamento objeto-relacional em PHP com PEAR::Data_Object
Método Fetch
Almir [email protected]
function fetch() {
$ret = parent::fetch();if ($ret === false) return false;require_once("cliente/cliente.php");$cliente = DB_DataObject::Factory('cliente');$cliente->get($this->cliente_id);$this->setCliente($cliente);require_once("livro/livro.php");$livro = DB_DataObject::Factory('livro');$livro->get($this->livro_id);$this->setLivro($livro);
return true;}
Mapeamento objeto-relacional em PHP com PEAR::Data_Object
Bibliografia
• Wikipédia - http://www.wikipedia.org• PHP - http://www.php.net• PEAR - http://pear.php.net• Markus Wolff
Almir [email protected]