Erro ao gerar a tabela

4 views
Skip to first unread message

Evaldo Barbosa

unread,
Mar 26, 2010, 2:43:53 PM3/26/10
to SQLReactor Brasil
Senhores,

Estou tentando gerar algumas tabelas a partir do Reactor e estou
recebendo a seguinte mensagem:
Fatal error: Call to a member function query() on a non-object in ../
SQLReactor/SQLReactor/engines/default/SQLReactorTable.php on line 109

Alguem sabe por que isso tá acontecendo?

David S. Rodrigues

unread,
Mar 26, 2010, 3:41:25 PM3/26/10
to sqlreact...@googlegroups.com
Posta o código que você está executando :)

2010/3/26 Evaldo Barbosa <tryades...@gmail.com>

--
Você está recebendo esta mensagem porque se inscreveu no grupo "SQLReactor Brasil" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para sqlreact...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para sqlreactor-bra...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/sqlreactor-brasil?hl=pt-BR.




--
David S. Rodrigues

Evaldo Barbosa

unread,
Mar 26, 2010, 3:45:19 PM3/26/10
to sqlreact...@googlegroups.com
O código tá sendo esse

$criar = array(
            "TipoSocioModel",
            "ConselhoModel",
            "PessoaModel",
            "PessoaConselhoModel",
            "EnderecoModel"
        );

            SQLReactor::createTables( $criar );

Atenciosamente,

Evaldo Barbosa
Analista de Sistemas / Desenvolvedor Web

http://www.vivaolinux.com.br/~collapse
http://www.twitter.com/evaldobarbosa
http://www.via6.com.br/evaldobarbosa


2010/3/26 David S. Rodrigues <davi...@gmail.com>

Evaldo Barbosa

unread,
Mar 26, 2010, 4:02:44 PM3/26/10
to sqlreact...@googlegroups.com
Senhores, resolvi o problema.

Ele estava dizendo que não podia usar o método query do objeto class (linha 109).

O problema é justamente que a variável $class não é nada ali pois a mesma não foi informada nem como parâmetro, nem dentro do método.

O que fiz foi procurar a chamada do método createIndexes em SQLReactorTable e nessa chamada colocar o parâmetro a $class que o método principal recebe e na declaração do método createIndexes criar um parãmetro &$class. Assim o problema foi resolvido:

Abaixo como ficou:

O que era (linha 114 de SQLReactorTable)
public function createTable( &$class ){
        $class->_connection->query( $this->getCreateSQL( $class ) );
       
        if( $class->_primaryKey == array( 'id' ) ){
            $sql = $this->columns->id->getCreateSequenceSQL( $class );
           
            if( $sql ){
                $class->_connection->query( $sql );
            }
        }
       
        $this->createIndexes();
    }

ficou:

public function createTable( &$class ){
        $class->_connection->query( $this->getCreateSQL( $class ) );
       
        if( $class->_primaryKey == array( 'id' ) ){
            $sql = $this->columns->id->getCreateSequenceSQL( $class );
           
            if( $sql ){
                $class->_connection->query( $sql );
            }
        }
       
        $this->createIndexes( $class );
    }

e o que era (linha 97):

public function createIndexes(){
        foreach( $this->indexes as $index ){
            $indexName = "idx_{$this->name}";
           
            $columns = array();
            foreach( $index as $columnName ){
                $indexName .= "_{$this->columns->$columnName->name}";
                $columns[] = "{$class->_connection->engine->escapeNameOpen}{$this->columns->$columnName->name}{$class->_connection->engine->escapeNameClose}";
            }
           
            if( $columns ){
                $sql = "CREATE INDEX {$class->_connection->engine->escapeNameOpen}{$indexName}{$class->_connection->engine->escapeNameClose} ON {$class->_connection->engine->escapeNameOpen}{$this->name}{$class->_connection->engine->escapeNameClose} ( " . implode( ', ', $columns ) . " )";
                $class->_connection->query( $sql );
            }
        }
    }

ficou:

public function createIndexes( &$class ){
        foreach( $this->indexes as $index ){
            $indexName = "idx_{$this->name}";
           
            $columns = array();
            foreach( $index as $columnName ){
                $indexName .= "_{$this->columns->$columnName->name}";
                $columns[] = "{$class->_connection->engine->escapeNameOpen}{$this->columns->$columnName->name}{$class->_connection->engine->escapeNameClose}";
            }
           
            if( $columns ){
                $sql = "CREATE INDEX {$class->_connection->engine->escapeNameOpen}{$indexName}{$class->_connection->engine->escapeNameClose} ON {$class->_connection->engine->escapeNameOpen}{$this->name}{$class->_connection->engine->escapeNameClose} ( " . implode( ', ', $columns ) . " )";
                $class->_connection->query( $sql );

            }
        }
    }

Atenciosamente,

Evaldo Barbosa
Analista de Sistemas / Desenvolvedor Web

http://www.vivaolinux.com.br/~collapse
http://www.twitter.com/evaldobarbosa
http://www.via6.com.br/evaldobarbosa


2010/3/26 Evaldo Barbosa <tryades...@gmail.com>

Evaldo Barbosa

unread,
Mar 26, 2010, 4:07:22 PM3/26/10
to sqlreact...@googlegroups.com
Ahhh... a versão que tô usando ainda é a v 0.10!
Reply all
Reply to author
Forward
0 new messages