lucaswxp 22 Denunciar post Postado Julho 21, 2009 Olá a todos ^^ Alguém ai poderia me dizer qual a diferença entre estas variaveis? Eu apenas sei que servem para relacionamento entre tabelas.... OBS: Comecei a estudar ontem... entao paciencia xD OBS²: Eu ja li no manual oficial e não entendi Compartilhar este post Link para o post Compartilhar em outros sites
~TiuTalk~ 7 Denunciar post Postado Julho 21, 2009 Cada uma tem um uso específico... Vou tentar falar um pouco de cada usando exemplo de notícias, comentários e tags: O hasMany serve pra quando um model engloba vários registros de outro model, por exemplo uma notícia que tem vários (hasMany) comentários... Ou seja: class Noticia extends AppModel { var $name = 'Noticia'; var $hasMany = array('Comentario'); } E, cada comentário pertence (belongsTo) a uma notícia.. então: class Comentario extends AppModel { var $name = 'Comentario'; var $belongsTo = array('Noticia'); } Assim, quando você der um find all nas notícias vai pegar também os comentários dela e vice-e-versa. Já o hasAndBelongsToMany ou HATBM (que significa "tem e pertence a muitos") seria a relação entre as notícias e as tags... Uma tag pode pertencer a várias notícias e uma notícia pode conter a várias tags diferentes (ou não)... Então, fica: class Noticia extends AppModel { var $name = 'Noticia'; var $hasMany = array('Comentario'); // Cada notícia tem um ou mais comentários var $blongsTo = array('Categoria'); // Cada notícia pertence a uma categoria var $hasAndBelongsToMany = array('Tag'); // Cada notícia tem e pertence a um ou mais tags } .... class Tag extends AppModel { var $name = 'Tag'; var $hasAndBelongsToMany = array('Noticia'); } Espero que tenha entendido. ;) Veja mais na documentação em português (pt): http://book.cakephp.org/pt/view/78/Associations-Linking-Models-Together Compartilhar este post Link para o post Compartilhar em outros sites
lucaswxp 22 Denunciar post Postado Julho 21, 2009 Entendi +- só não muito bem o hasAndBelongsToMany :P Tipo... tentei aplicar aqui em um sisteminha que lista os produtos e suas respectivas categorias... mas não estou conseguindo... de uma olhada no codigo class ProdutosController extends AppController{ var $uses = array("Produto"); var $belongsTo = array("Subcategoria"); function index(){ $this->set('dados',$this->Produto->find('all')); } } .... class Subcategoria extends AppModel { var $name = "Subcategoria"; var $belongsTo = array('Categoria'); var $hasMany = array("Produtos"); } ... class Categoria extends AppModel { $hasMany = array("Subcategoria"); }E a estrutura do db PRODUTOS------- id categoria_id subcategoria_id titulo descricao SUBCATEGORIAS------ id categoria_id nomeSubcategoria CATEGORIAS------- id nomeCategoria E não deu muito certo http://forum.imasters.com.br/public/style_emoticons/default/ninja.gif Tipo... ali estou tentando fazer um model(subcategoria) se ligar a outro model(categoria) isso não é possivel certo?... Então o que devo fazer? http://forum.imasters.com.br/public/style_emoticons/default/graduated.gif Compartilhar este post Link para o post Compartilhar em outros sites
~TiuTalk~ 7 Denunciar post Postado Julho 21, 2009 Erro de lógica... Se o produto pertence a uma sub-categoria e a sub-categoria pertence a uma categoria então o produto não precisa pertencer a uma categoria... :) Compartilhar este post Link para o post Compartilhar em outros sites
lucaswxp 22 Denunciar post Postado Julho 21, 2009 Não consegui :( Eu até tinha pensado nisso... só que retirei a coluna "categoria_id" e de nada adiantou.... =/ Fiz umas alterações no codigo também.. veja: class ProdutosController extends AppController{ var $uses = array("Produto"); var $belongsTo = array("Subcategoria"); function index(){ $this->set('dados',$this->Produto->find('all')); } } class Subcategoria extends AppModel { var $name = "Subcategoria"; var $belongsTo = array('Categoria'); var $hasMany = array("Produto"); } class Categoria extends AppModel { var $hasMany = array("Subcategoria"); }Mas nada... só recebe dados da tabela "produtos"... eu tentei trocar o $uses do controller Produtos para ('Produto','Subcategoria')... nada tbm :P OBS again: Comecei a estudar ontem paciencia xD Compartilhar este post Link para o post Compartilhar em outros sites
lucaswxp 22 Denunciar post Postado Julho 21, 2009 Hehe... esquece... erro humano :P Eu estava usando o $belongsTo no controller do produto e eu deveria usar no model :P Resolvido ^^ Compartilhar este post Link para o post Compartilhar em outros sites