Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?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!
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
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 {
No controller:
Para tirar este Application_ do nome da classe, dá uma lida aqui que eu já falei um pouco sobre o assunto.
Carlos Eduardo