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

