Ah lembrando, como vc tá aprendendo Java, DAO é um pattern. http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html
2008/1/16 Marcus Cavalcanti <[EMAIL PROTECTED]>: > o nome é DAO .. no DAO vc usa suas entidades (model) > > 2008/1/13 Paulo Balzi <[EMAIL PROTECTED]>: > > Marco, valeu pela explicação. > > Como surgiu essa questão aqui na lista e aproveitando que estou fazendo > > um curso de Java, perguntei sobre o MVC ao professor. > > Entendi o seguinte, que no Model fica o negócio da sua aplicação, > > independente de suar banco de dados ou não. Ele falou tbem, que muita gente > > costuma representar o modelo relacional do banco orientado a objeto, como vc > > fez, mas que não é necessáriamente fazer desse jeito. > > E do jeito que fiz, com as classes de selects, outra pra inserir, > > excluir, alterar, etc....eu nada mais, fiz uma camada de manipulação da base > > (ele falou o nome que seria isso mas eu esqueci!), e que não seria o Model > > da aplicação...hehe > > Resumindo, ainda tenho muito q entender. > > :o) > > > > 2008/1/11 Marco Telles <[EMAIL PROTECTED]>: > > > > Eu 'exprico' (ou tento...) :-) > > > > > > Com exemplo acho que fica melhor, ok ? Vou omitir os detalhes e > > > colocar > > > só os dados relevantes, se ficar confuso me fala. > > > > > > 1) Associação > > > Considerando: > > > a) tabela (classe) produto: > > > id > > > descricao > > > fabricante > > > > > > b) tabela (classe) fabrica: > > > id > > > nome > > > > > > c) código php (para não misturar com o ci, já que o problema não é bem > > > com o ci) ;-) > > > > > > $fabricante = new Fabrica; > > > $fabricante->id = 777; > > > $fabricante->nome = 'Tabajara'; > > > > > > $produto = new Produto; > > > $produto->id = 1; > > > $produto->descricao = 'Assento Sanitário Ejetável'; > > > $produto->fabricante = $fabricante; > > > > > > echo 'Produto: ' . $produto->descricao; >>> > > > Assento Sanitário Ejetável > > > echo 'Fabricante: ' . $produto->fabricante->nome; >>> > > > Tabajara > > > > > > Fico devendo a Agregação e Composição... :-) > > > > > > Abs > > > > > > Muita sorte para nós! > > > > > > Marco Telles > > > > > > ############# > > > # Pier de Ipanema ( http://www.pierdeipanema.com.br/ ) > > > # X-Trad Traduções BR ( http://www.x-trad.org/ ) > > > # CodeIgniter PHP framework ( http://www.codeigniter.com.br/ ) > > > # Ubuntu The power of free software ( http://www.ubuntu-br.org/ ) > > > # Python Programming Language ( http://www.pythonbrasil.com.br/ ) > > > > > > > > > > > > Paulo Balzi escreveu: > > > > Marco, achei bem legal esse seu exemplo, clareou mais um pouco as > > > > idéias... > > > > > > > > mas não entendi direito a parte da associação, não consegui > > > visualizar > > > > direito como seria isso na hora de fazer uma consulta envolvendo > > > mais > > > > de uma tabela. > > > > > > > > valeu > > > > > > > > 2008/1/11 Marco Telles <[EMAIL PROTECTED] > > > > <mailto: [EMAIL PROTECTED]>>: > > > > > > > > E eu aproveito também para ver se entendi direito o model ;-) > > > > > > > > Errado não está, mas considerando oop, onde cada classe carrega > > > > seus atributos e métodos próprios, esse esquema foge ao padrão e > > > > cria problemas futuros, apesar de funcionar... > > > > > > > > Estou com o que disse o Edinho. Além do CI só conheço o Zend e > > > ele > > > > associa também um model bastando declarar na classe um atributo > > > > protected com o nome da tabela. > > > > > > > > Cada model deve conter uma única tabela (repito, considerando > > > oop > > > > já que mvc estou engatinhando, então posso estar enganado), seus > > > > > > > atributos e métodos específicos (que vão incluir as validações, > > > > etc... como já discutido aqui). > > > > > > > > No caso se tenho uma tabela produto com produtoId, produtoNome, > > > > produtoMarcaId e outra tabela marca com marcaId e marcaNome, > > > então > > > > ficaria: > > > > > > > > Model prodmodel.php: > > > > > > > > Class Prodmodel > > > > { > > > > private $produtoId; > > > > private $produtoNome; > > > > private $produtoMarca; > > > > const Tab = 'produto'; > > > > > > > > function __construct() { > > > > // Chama o construtor do Model > > > > parent::Model(); > > > > $this->load->model('Marcamodel'); // ou pode chamar > > > também > > > > no método, caso apenas um método utilize a tabela para > > > associação ? > > > > } > > > > > > > > function selProdAll() { > > > > // seleciona todos produtos e retorna um objeto > > > > $query = $this->db->get(self::Tab); > > > > return $query->result(); > > > > } > > > > > > > > function assProdMarca( $id ) { > > > > // faz a associação da tabela marca e produto - o model > > > > marca poderia ser chamado aqui. ? > > > > $this->produtoMarca = $this->Marcamodel->get( $id ); > > > > } > > > > > > > > (...) > > > > } > > > > > > > > Na classe Marca, é a mesma coisa, com seus respectivos atributos > > > e > > > > métodos.. > > > > > > > > Isso é o que entendi do model > > > > > > > > Abs > > > > > > > > Marco > > > > > > > > Paulo Balzi escreveu: > > > >> vou aproveitar a deixa pra ver se estou fazendo certo. :o) > > > >> > > > >> Na minha aplicação eu criei o seguinte: > > > >> - um model para fazer selects no banco: nesse model existem > > > >> vários tipos de selects, variando a qtd de paramentros, o tipo > > > do > > > >> retorno, etc > > > >> - um model pra trabalhar com metadados da tabela: aqui criei > > > >> métodos q busca a chave primária da tabela, outra q retorna os > > > >> campos da tabela, etc... > > > >> - um terceiro model para fazer o CRUD (insert, delete, alter) > > > nas > > > >> tabelas > > > >> > > > >> Nos meus controlers, eu simplesmente vou chamando o que eu > > > >> preciso, um select, um insert, etc... > > > >> > > > >> acredito que 100% correto não está, mas está muito errado?? > > > >> > > > >> valeu > > > >> > > > >> 2008/1/11 Edinho Almeida < [EMAIL PROTECTED] > > > >> <mailto:[EMAIL PROTECTED]>>: > > > >> > > > >> O CodeIgniter me parece ser o único que não associa por > > > >> padrão um Model a uma Tabela. > > > >> > > > >> Em Cakephp ou Rails você cria > > > >> um Model chamado Produto e ele já se relaciona com a tabela > > > Produtos. > > > >> Isso é interessante porque nestes frameworks já ganhamos > > > >> alguns metodos no model sem digitar nada no model em si: > > > >> Poderia fazer por exemplo: > > > >> > > > >> No model: > > > >> > > > >> class Produto extends Model { > > > >> function Produto() > > > >> { > > > >> parent::Model(); > > > >> } > > > >> } > > > >> > > > >> No controller: > > > >> $this->load->model('Produto'); > > > >> $result = $this->produto->findById('122'); //encontrará a > > > >> linha no banco usando where id='122' > > > >> ou > > > >> $result = $this->produto->findByName('Camiseta branca'); > > > >> //encontrará a linha no banco usando where name='Camiseta > > > >> branca' > > > >> > > > >> ATENÇÃO: O CÓDIGO ACIMA NÃO EXISTIRÁ NO CODEIGNITER - É UM > > > >> EXEMPLO > > > >> > > > >> Para termos isso no codeigniter teríamos que criar estes > > > >> metodos na unha: > > > >> class Produto extends Model { > > > >> function Produto() > > > >> { > > > >> parent::Model(); > > > >> } > > > >> function _findByAlgo($algo,$valor){ > > > >> $this->db->where( $algo, $valor); > > > >> $query = $this->db->get('Produtos'); > > > >> return $query->result(); > > > >> } > > > >> function findById($id){ > > > >> return $this->_findByAlgo('id',$id); > > > >> } > > > >> function findByName($id){ > > > >> return $this->_findByAlgo('name',$id); > > > >> } > > > >> } > > > >> > > > >> Num projeto que desenvolvi que haviam várias páginas de > > > >> formulários eu tinha um controller e um model para cada > > > página. > > > >> EX: página DADOS DO PROPONENTE > > > >> no controller eu tinha: > > > >> $this->load->model('Dados_do_proponente'); > > > >> E no Model Dados_do_proponente eu alterava dados nas > > > tabelas: > > > >> proponentes //que continha uma coluna para dizer se era > > > >> pessoa fisica ou juridica > > > >> proponentes_pf > > > >> proponentes_pj > > > >> proponentes_areasdeatuacao // tabela N:N com a tabela > > > >> areasdeatuacao > > > >> > > > >> Ou seja em vez de chamar vários Models eu chamava um único > > > >> model e e este fazia a ponte com várias tabelas. > > > >> No caso do Cakephp e Rails eu estaria saindo do padrão para > > > >> fazer isso. > > > >> Mas no caso do codeigniter ele já parte do principio de > > > você > > > >> ter somente o metodos que utilizará. Vide exemplo do model > > > na > > > >> documentação que contém os metodos get_last_ten_entries(), > > > >> insert_entry() e update_entry(); > > > >> > > > >> Abs > > > >> Edinho Almeida > > > >> > > > >> > > > >> > > > >> On 1/10/08, *Marco Telles* < [EMAIL PROTECTED] > > > >> <mailto:[EMAIL PROTECTED]>> wrote: > > > >> > > > >> Pelo que entendi, para cada tabela corresponde um > > > model, > > > >> é isso ? > > > >> E para chamar tem que ser um a um ? > > > >> Exemplo: > > > >> $this->load->model('Produtomod'); > > > >> $this->load->model('Linhamod'); > > > >> (...) > > > >> > > > >> Buscando no guia, ví que o segundo parâmetro é para > > > >> usarmos outro nome, > > > >> mas não vi nada para carregar vários models... > > > >> > > > >> Abs > > > >> > > > >> -- > > > >> Muita sorte para nós! > > > >> > > > >> Marco Telles > > > >> > > > >> ############# > > > >> # Pier de Ipanema ( http://www.pierdeipanema.com.br/ ) > > > >> # CodeIgniter PHP framework ( > > > >> http://www.codeigniter.com.br/ ) > > > >> # Ubuntu The power of free software ( > > > >> http://www.ubuntu-br.org/ ) > > > >> # Python Programming Language ( > > > >> http://www.pythonbrasil.com.br/ ) > > > >> > > > >> > > > >> _______________________________________________ > > > >> Lista mailing list > > > >> [email protected] <mailto: > > > [email protected]> > > > >> > > > http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br > > > >> > > > >> <http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br > > > > > > > >> > > > >> > > > >> > > > >> _______________________________________________ > > > >> Lista mailing list > > > >> [email protected] <mailto:[email protected]> > > > >> > > > http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br > > > >> > > > >> > > > >> > > > >> > > > >> -- > > > >> Paulo Balzi > > > >> > > > ------------------------------------------------------------------------ > > > >> > > > >> _______________________________________________ > > > >> Lista mailing list > > > >> [email protected] <mailto: [email protected]> > > > >> http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br > > > > > > > > > > > _______________________________________________ > > > > Lista mailing list > > > > [email protected] <mailto: [email protected]> > > > > http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br > > > > > > > > > > > > > > > > > > > > > > > -- > > > > Paulo Balzi > > > > > > > ------------------------------------------------------------------------ > > > > > > > > _______________________________________________ > > > > Lista mailing list > > > > [email protected] > > > > http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br > > > > > > > > > > _______________________________________________ > > > Lista mailing list > > > [email protected] > > > http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br > > > > > > > > > > > -- > > Paulo Balzi > > _______________________________________________ > > Lista mailing list > > [email protected] > > http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br > > > > >
_______________________________________________ Lista mailing list [email protected] http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br

