tocho 0 Denunciar post Postado Agosto 3, 2011 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
Matias Rezende 50 Denunciar post Postado Agosto 4, 2011 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
tocho 0 Denunciar post Postado Agosto 4, 2011 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
Matias Rezende 50 Denunciar post Postado Agosto 4, 2011 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