mapeamento objeto-relacional com pear::dataobject

21
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

Upload: manuel-lemos

Post on 24-May-2015

1.055 views

Category:

Technology


3 download

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

TRANSCRIPT

Page 1: Mapeamento Objeto-Relacional com PEAR::DataObject

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

Page 2: Mapeamento Objeto-Relacional com PEAR::DataObject

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

Page 3: Mapeamento Objeto-Relacional com PEAR::DataObject

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

Page 4: Mapeamento Objeto-Relacional com PEAR::DataObject

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]

Page 5: Mapeamento Objeto-Relacional com PEAR::DataObject

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]

Page 6: Mapeamento Objeto-Relacional com PEAR::DataObject

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

Page 7: Mapeamento Objeto-Relacional com PEAR::DataObject

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

Page 8: Mapeamento Objeto-Relacional com PEAR::DataObject

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

}?>

Page 9: Mapeamento Objeto-Relacional com PEAR::DataObject

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

Page 10: Mapeamento Objeto-Relacional com PEAR::DataObject

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

Page 11: Mapeamento Objeto-Relacional com PEAR::DataObject

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

}?>

Page 12: Mapeamento Objeto-Relacional com PEAR::DataObject

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

}?>

Page 13: Mapeamento Objeto-Relacional com PEAR::DataObject

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

?>

Page 14: Mapeamento Objeto-Relacional com PEAR::DataObject

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

?>

Page 15: Mapeamento Objeto-Relacional com PEAR::DataObject

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

?>

Page 16: Mapeamento Objeto-Relacional com PEAR::DataObject

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

Page 17: Mapeamento Objeto-Relacional com PEAR::DataObject

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

}?>

Page 18: Mapeamento Objeto-Relacional com PEAR::DataObject

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

Page 19: Mapeamento Objeto-Relacional com PEAR::DataObject

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]

Page 20: Mapeamento Objeto-Relacional com PEAR::DataObject

Mapeamento objeto-relacional em PHP com PEAR::Data_Object

Agradecimentos

Almir [email protected]

Page 21: Mapeamento Objeto-Relacional com PEAR::DataObject

Mapeamento objeto-relacional em PHP com PEAR::Data_Object

Fim

Almir [email protected]