Modelos e Bancos de Dados

Gravatar de alexmartins alexmartins Tópico publicado em
30/01/2010, 22:36:59

Relacionamento: muitos para muitos

Olá! Seguindo o manual em pdf percebi que falta o tipo de relacionamento muitos para muitos. Não sei se é porque estou começando agora, tenho dúvidas como relacionar no spaghetti*, e gostaria de uma explicação bem "mastigada" se possível.

Agradeço desde já.

Gravatar de Magno Magno Resposta publicada em
07/02/2010, 08:17:49

Relacionamento: muitos para muitos

Eu tb sou iniciante e tenho essa dúvida.
To começando a trabalhar agora com frameworks tb.

se puder rolar um um tutorzinho, tb agradeço!

Gravatar de Filipe Filipe Resposta publicada em
11/02/2010, 13:05:13

Relacionamento: muitos para muitos

penso que sendo um relacionamento muito para muitos, você possui 3 tabelas.

vai em exemplo

    tabela_usuarios tabela_comunidades tabela_participantes

Sendo que a 'tabela_usuarios', deve ter um campo chamado 'id', e a 'tabela_comunidades' tenha um campo chamado 'id'.

Você teria que ter, na tabela_participantes, PK de ambos os campos (id da tabela_usuarios e id da tabela_comunidades),

agora suponhamos que eu queira saber em quais comunidade um determinado usuário participa

$options = array(
     "conditions" => array(
          "tabela_usuarios_id" => 1 // Usuário com o id igual a 1
     )
);

$this->TabelaParticipantes->all($options);

no modelo tabela_participantes.php

class TabelaParticipantes extends AppModel {
     public $hasOne = array("TabelaUsuarios","TabelaComunidades"); // Relacionamento um para um
}

acho que seria isso, conseguiu entender mais ou menos como funciona?

veja no guia do desenvolvedor sobre Relacionamentos
http://www.spaghettiphp.org/docs/developer-guide/models/relacionamentos

Gravatar de Filipe Filipe Resposta publicada em
11/02/2010, 13:07:39

Relacionamento: muitos para muitos

também poderia fazer outra consulta, quais usuários participam de determinada comunidade


$options = array(
     "conditions" => array(
          "tabela_comunidades_id" => 1 // Comunidade com o id igual a 1
     )
);

$this->TabelaParticipantes->all($options);

Gravatar de robsonperassoli robsonperassoli Resposta publicada em
15/02/2010, 16:35:09

Relacionamento: muitos para muitos

Na verdade no relacionamento muitos X muitos, é gerada uma nova tabela.
ex: Livro x autor (um livro possui vários autores, um autor possui vários livros), gera a tabela livro_autor, e o relacionamento ficaria assim:


   //no model autor: 
   public $hasMany = array('livro_autor');
   
   //no model livro:   
   public $hasMany = array('livro_autor');
   
   //no model livro_autor: 
   public $belongsTo = array('livro', 'autor');

acho que seria isso. né?

Gravatar de Filipe Filipe Resposta publicada em
17/02/2010, 11:56:13

Relacionamento: muitos para muitos

robsonperassoli, é necessário gerar uma nova tabela, no meu exemplo foi a tabela_participantes

Você deve estar logado para responder a um tópico ou adicionar um novo.
Efetue login ou Registre-se para participar das discussões.