Trabalhando com JTable

Categoria: Joomla
Publicado em 12 de Fevereiro de 2011

Extender a classe JTable facilita o trabalho para inserir, alterar, remover e coletar dados de uma tabela.

Segue abaixo modelo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 
class Avatar extends JTable {
 
    // Configurações de campos da tabela. Para cada campo da tabela deve haver
    // uma propriedade e o respectivo valor padrão
    var $user_id = '0';
    var $avatar = '/images/avatar/sem_imagem.gif';
 
    function __construct( &$db ) {
 
    // Informe neste constructor, o nome da tabela no primeiro parâmetro
    // e campo índice da tabela (auto-increment) no segundo parâmetro
        parent::__construct( '#__usuarios_mais', 'user_id', $db );
    }
 
    // Replaces a row into a table based on an objects properties
    function replaceObject( ) {
        $table = $this->_tbl;
        $object = $this;
 
        $fmtsql = 'REPLACE INTO '.mysql_escape_string($table).' ( %s ) VALUES ( %s ) ';
        $fields = array();
        foreach (get_object_vars( $object ) as $k => $v) {
            if (is_array($v) or is_object($v) or $v === NULL) {
                continue;
            }
            if ($k[0] == '_') { // internal field
                continue;
            }
            $fields[] = mysql_escape_string( $k );
            $values[] = "'" . mysql_escape_string( $v ) . "'";
        }
        $this->_db->setQuery( sprintf( $fmtsql, implode( ",", $fields ) ,  implode( ",", $values ) ) );
 
        if (!$this->_db->query()) {
            return false;
        }
 
        return true;
    }
 
}

Para usar a classe Avatar acima:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

 
// Pega instância do banco de dados do Joomla
$db =& JFactory::getDBO();
 
// Instancia a classe da tabela Avatar
$tabela = new Avatar( $db );
 
// Preenche os campos
$campos = array();
$campos['user_id'] = 15;
$campos['avatar'] = '/images/minha_imagem.jpg';
 
// Insere os dados na tabela
$tabela->bind( $campos );
$tabela->store();
 
 
 

Copyright © Fernando Hidemi Uchiyama 2010 - Todos os direitos reservados