Deprecated: mysql_escape_string(): This function is deprecated; use mysql_real_escape_string() instead. in /home/hufersil/hufersil.com.br/system/libraries/lumine/lib/Connection/MySQL.php on line 516
HUFERSIL WEBDEVELOPER - Mapeamento de classes

HUFERSIL.WEBDEVELOPER - SoluƧƵes com qualidade - Hugo Ferreira da Silva

Mapeamento de classes Seg, 21 de janeiro de 2008 - as 10h25

O mapeamento de classes com o Lumine ficou mais fácil.
Agora, ele é feito dentro do próprio arquivo PHP, o que torna o processo bem mais rápido, além de você ter que alterar somente em um local caso haja necessidade de alteração.

Supondo que você tenha a tabela descrita como a abaixo:
+---------------+-------------+------+-----+------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+-------------+------+-----+------------+----------------+
| idpessoa | int(11) | | PRI | NULL | auto_increment |
| idgrupo | int(11) | | MUL | NULL | |
| nome | text | | | | |
| idade | int(11) | YES | | NULL | |
| data_cadastro | date | | | 0000-00-00 | |
+---------------+-------------+------+-----+------------+----------------+
Ficaria semelhante a:

  1. <?php
  2.  
  3. class Pessoa extends Lumine_Base {
  4.     // sobrecarga
  5.     protected $_tablename = 'tbl_pessoa';
  6.     protected $_package   = 'entidades';
  7.  
  8.     /**
  9.      * Inicia os valores da classe
  10.      * @author Hugo Ferreira da Silva
  11.      * @return void
  12.      */
  13.     protected function _initialize()
  14.     {
  15.         # nome_do_membro, nome_da_coluna, tipo, comprimento, opcoes
  16.        
  17.         $this->_addField('idpessoa', 'idpessoa', 'int', 11, array('primary' => true, 'notnull' => true, 'autoincrement' => true));
  18.         $this->_addField('grupo', 'idgrupo', 'int', 11, array('foreign' => '1', 'onUpdate' => 'CASCADE', 'onDelete' => 'CASCADE', 'linkOn' => 'idgrupo', 'class' => 'Grupo'));
  19.         $this->_addField('nome', 'nome', 'varchar', 150, array('notnull'=>true));
  20.         $this->_addField('idade', 'idade', 'int', 11, array());
  21.         $this->_addField('data_cadastro', 'data_cadastro', 'date', null, array('notnull' => true));
  22.     }
  23.  
  24.     /**
  25.      * Recupera um objeto estaticamente
  26.      * @author Hugo Ferreira da Silva
  27.      * @return void
  28.      */
  29.     public static function staticGet($pk, $pkValue = null)
  30.     {
  31.         $obj = new Pessoa;
  32.         $obj->get($pk, $pkValue);
  33.         return $obj;
  34.     }
  35.  
  36. }
  37.  
  38. ?>

Ao invés de ser utilizado um arquivo XML, como era antes, o mapeamento é feito diretamente dentro da classe, através de dois métodos: _addField e _addForeignRelation.

Este primeiro método, adiciona os campos que existem suas tabelas. O segundo é para relacionamento externo (leia sobre relacionamentos para entender mais).

  1. $this->_addField(String $nome_membro, String $nome_coluna, String $tipo_coluna, int $comprimento_coluna, Array $opcoes);

Como pode ser notado, Lumine trabalha com um nome da propriedade e com nome da coluna na tabela. Assim, você pode diferenciar o nome de sua coluna e o nome da sua propriedade na classe. Vejamos os detalhes:

  • Nome do membro: Nome do membro da classe que representará a coluna de sua tabela;
  • Nome da coluna: Nome real da coluna na tabela representada;
  • Tipo do campo: tipo do campo da tabela (sem o comprimento);
  • Comprimento: comprimento do campo da tabela;
  • Opções: Array associativo contendo várias opções:
    • primary: indica que é uma chave primária;
    • notnull: indica que o campo não pode ser nulo;
    • autoincrement: indica que o campo é auto-incrementável (ou serial no caso do PostgreSQL). Em todos os bancos que tiverem campos de auto-numeração, deverá ser indicado como autoincrement => true.
    • label: Rótulo para ser utilizado nos formulários gerados pela engenharia reversa. Assim você pode personalizar o formulário;
    • displayField: Caso o campo seja um relacionamento com outra tabela, você poderá indicar o nome do campo da outra tabela que conterá o valor a ser exibido na combo de valores;
    • foreign: Indica que este campo é um campo que contém valor de uma outra tabela (chave-estrangeira);
    • onUpdate: Ação que o banco toma em quando o valor da chave estrangeira for atualizado;
    • onDelete: Ação que o banco toma em quando o valor da chave estrangeira for removido;
    • linkOn: Nome do membro da entidade estrangeira a qual o campo está vinculado;
    • class: Nome da classe de relacionamento com este campo;
    • format: Formato de saída do campo (os mesmos suportados pela função sprintf (em caso de strings e números) e strftime (em caso de datas e tempo).
    • lazy: permite carregar valores de chaves estrangeiras assim que o registro da entidade que está sendo manipulada for carregado.
    • formatter: Permite definir uma função para ser executada quando o valor do campo for requerido.
No tópico relacionamentos,  veremos como trabalhar com chaves estrangeiras e relacionamentos em nosso banco de dados.