Junção de tabelas complexa HABTM
27/09/2017
0
Bom dia pessoal! Talvez (muito provavelmente) pra muitos aqui nem seja tão complexa.. mas to me batendo a alguns dias nessa questão.
Eu tenho uma tabela produtos no mysql onde ele é HABTM (has and belongs to many) a tabela cores, que por sua vez também tem a tabela de numeração (tamanhos), e a tabela fotos relacionados a esse produto. O problema é que a cor de cada sapato vai definir quais os números disponíveis naquela cor bem como carregar as fotos respectivas daquela cor. Até difícil eu conseguir explicar. Vou dar um exemplo.
Bota Firenze na cor marrom possui o tamanho 36, 37 e 38.
A mesma bota Firenze só que na cor preta possui o tamanho 40, 41 e 42.
E cada um tem que ter suas fotos respectivas. É semelhante ao site do Netshoes na parte de detalhes do produto. Mas a minha dúvida são duas.
1 - Como modelar corretamente essas tabelas? Eu fiz a tabela produtos ser HABTM cores que por sua vez é HABTM numeração e a cores é HasMany fotos porém não sei se está certo.
2 - E estou com muita dificuldade nesse formato de tabela fazer a junção deles na hr de cadastrar, pois HABTM muitos para muitos beleza, mas como associar a cor com a numeração no mesmo cadastro do produto?
Alguém pode me ajudar. Eu estou usando o Cakephp 2.x se ajudar em algo. Muito obrigado pessoal
Eu tenho uma tabela produtos no mysql onde ele é HABTM (has and belongs to many) a tabela cores, que por sua vez também tem a tabela de numeração (tamanhos), e a tabela fotos relacionados a esse produto. O problema é que a cor de cada sapato vai definir quais os números disponíveis naquela cor bem como carregar as fotos respectivas daquela cor. Até difícil eu conseguir explicar. Vou dar um exemplo.
Bota Firenze na cor marrom possui o tamanho 36, 37 e 38.
A mesma bota Firenze só que na cor preta possui o tamanho 40, 41 e 42.
E cada um tem que ter suas fotos respectivas. É semelhante ao site do Netshoes na parte de detalhes do produto. Mas a minha dúvida são duas.
1 - Como modelar corretamente essas tabelas? Eu fiz a tabela produtos ser HABTM cores que por sua vez é HABTM numeração e a cores é HasMany fotos porém não sei se está certo.
2 - E estou com muita dificuldade nesse formato de tabela fazer a junção deles na hr de cadastrar, pois HABTM muitos para muitos beleza, mas como associar a cor com a numeração no mesmo cadastro do produto?
Alguém pode me ajudar. Eu estou usando o Cakephp 2.x se ajudar em algo. Muito obrigado pessoal
Goof
Curtir tópico
+ 0
Responder
Post mais votado
03/10/2017
Muito obrigado pela resposta Gilis. Eu pensei nisso.. porém o problema que eu tinha encontrado era fazer as condicoes na busca.. onde eu estaria no controller produto e buscaria a cor e ela trouxesse os tamanhos.. daí já mudei de ideia por causa desse problema. O que eu usei agora.. foi serializar na tabela produtos as cores com seus respectivos tamanhos.. aparentemente deu certo. Fiz assim..
A tabela cores e tamanhos não tem ligação mais com os produtos.. porém carrego elas via loadModel na hr da inserção e gero um array com as informações: por exemplo.
Antes de salvar eu serializo, e parece que deu certo.. não sei se é uma boa prática, mas até que achei elegante.
A tabela cores e tamanhos não tem ligação mais com os produtos.. porém carrego elas via loadModel na hr da inserção e gero um array com as informações:
array('cor'=>#ccc, array('tamanho'=>array(23,45,34)))
Antes de salvar eu serializo, e parece que deu certo.. não sei se é uma boa prática, mas até que achei elegante.
Goof
Responder
Mais Posts
02/10/2017
Venancio Alves
Olá Goof, por gentileza mande as tabelas para exemplificar melhor.
Abraço
Abraço
Responder
02/10/2017
Venancio Alves
Olá Goof, como o seu relacionamento é N:N, ou seja, de muitos para muitos, a sua tabela de cores deve ter duas chaves estrangeiras (uma para o produto e a outra para o tamanho).
Exemplo: tabela_produto e a tabela_tamanho se relacionam com a tabela_cores.
Exemplo: tabela_produto e a tabela_tamanho se relacionam com a tabela_cores.
Responder
Clique aqui para fazer login e interagir na Comunidade :)