Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

lucaswxp

[Resolvido] $hasMany, $hasBelongs, $hasAndBelongsT

Recommended Posts

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.