Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

tocho

Conceito sobre Dbtable

Recommended Posts

Estou usando a estrutura padrão do Zend, e tenho o seguinte Dbtable:

 

models/DbTable/Cidade.php

class Application_Model_DbTable_Cidade extends Zend_Db_Table_Abstract
{
   protected $_name = 'cidade';
}

 

no controller eu fiz assim:

       $cidade = new Application_Model_DbTable_Cidade();

       $c = $cidade->select()->where('fk_id_estado = ?', '1');
       $e = $cidade->fetchAll( $c )->toArray();

       print_r($e);

 

A dúvida é, eu não teria que criar um model para fazer o select, ou posso fazer isso diretamente no controller?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usando os exemplos citados no Quick start do ZF, você deve criar um Mapper (ou por chamar de Model). Este Mapper vai enviar a consulta para o DbTable. No seu caso, seria algo mais ou menos assim:

 

class Model_Cidade {

   private function $_dbTable;

   public function __construct() {
       $this->setDbTable(new Application_Model_DbTable_Cidade());
   }

   public function findCidade($id) {
       return $this->getDbTable->find($id);
   }


   public function getDbTable() {
        return $this->getDbTable();
   }

   public function setDbTable($dbTable) {
        $this->_dbTable = $dbTable;
   }
}

 

No controller:

 

$model = new Model_Cidade();
print_r($model->findCidade(1)->toArray());

 

Para tirar este Application_ do nome da classe, dá uma lida aqui que eu já falei um pouco sobre o assunto.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Huummm padrão DataMapper, existe algum método automático de eu criar isso?

 

por exemplo:

 

class Cidade
{
   private $_id;
   private $_nome;

   public function getId(){
       return $this->_id;
   }

   public function setId($id){
       $this->_id = $id;
       return $this;
   }

   public function getNome(){
       return $this->_name;
   }

   public function setNome($name){
       $this->_name = $name;
       return $this;
   }
}

 

Acho isso muito trabalhoso!

 

Obrigado pela dica do Application!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por padrão o ZF cria, para cada linha retornada do banco, uma instância de Zend_Db_Table_Row_Abstract. Por padrão, ela adiciona todos os valores em $_data['nomeDoCampo']. Com os métodos __get e __set da classe, ao fazer $row->id = 1 ele adiciona $this->_data['id'] = 1. Como eu não uso o __set não posso dar 100% de certeza. O __get eu tenho certeza que, ao fazer echo $row->id, ele busca $this->_data['id'].

 

Outra coisa que você pode fazer é adicionar no seu DbTable o seguinte:

 

class Model_DbTable_Cidade extends Zend_Db_Table_Abstract
{
   protected $_name = 'cidade';
   protected $_rowClass = 'Model_Row_Cidade';
}

 

Aí você cria uma classe Model_Row_Cidade extends Zend_Db_Table_Row_Abstract. Aí cada linha da consulta retorna uma instância de Model_Row_Cidade.

 

Captou a ideia?

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.