Chaves estrangeiras de uma mesma tabela.

1,102 views
Skip to first unread message

Walison

unread,
Dec 2, 2011, 1:43:17 PM12/2/11
to cakep...@googlegroups.com
Pessoal,

Esses dias mesmo alguém postou esta dúvida aqui, procurei mas, não encontrei.

O meu problema é: Tenho uma tabela de relacionamento que faz o relacionamento entre uma mesma tabela, ou seja, as duas chaves estrangeiras que ela possuirá referenciam a mesma chave primária.

Por exemplo:

Tenho a tabela testes com um campo id, e criei uma outra tabela testes_testes com os campos teste_id e teste_id1.

Ao cadastrar os testes tem na view um campo Teste onde eu seleciona os testes relacionados a aquele teste que estou cadastrando. O problema é que ao clicar em cadastrar da um erro dizendo que a coluna teste_id foi especificada duas vezes.

Alguém sabe, se tem como e qual a forma de fazer isso que quero?

Desde já agradeço!

Walison Soares
Programador Júnior
Centro de Informática/Desenvolvimento
Faculdade de Medicina/UFMG


Thiago Belem

unread,
Dec 2, 2011, 1:50:40 PM12/2/11
to cakep...@googlegroups.com
Na documentação (http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#hasandbelongstomany-habtm) mostra como você pode definir quais são os campos, tabelas e etc. envolvidos na relação HABTM.

Abs,
--
Thiago Belem
Desenvolvedor
Rio de Janeiro - RJ - Brasil

+55 (21) 8865.9250
thiagobelem.net
con...@thiagobelem.net

Skype / gTalk » thiago.belem.web
LinkedIn » br.linkedin.com/in/thiagobelem/pt
Assando Sites
, curso de CakePHP » assando-sites.com.br


--
CakePHP Tuga (cakephp-pt)
 
Utilize http://bin.cakephp.org para códigos
Cookbook: http://book.cakephp.org
 
Website do CakePHP: http://cakephp.org/
Website do grupo: http://groups.google.com/group/cakephp-pt?hl=pt-PT

Walison

unread,
Dec 2, 2011, 2:52:16 PM12/2/11
to cakep...@googlegroups.com
Thiago,

Até já tinha lido isso e li denovo, mas, o problema continua.

O erro retornado é:

Erro: SQLSTATE[42000]: Syntax error or access violation: 1110 Column 'topico_id' specified twice

Abaixo vou colocar um trecho do HABTM que talvez eu não esteja sabendo configurar.

Levando o exemplo em consideração o nome teste que dei como exemplo é tópico.

public $hasAndBelongsToMany = array(
'Topico' => array(
'className' => 'Topico',
'joinTable' => 'topicos_topicos',
'foreignKey' => 'topico_id',
'associationForeignKey' => 'topico_id',
'unique' => true,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
'deleteQuery' => '',
'insertQuery' => ''
),
'Topico1' => array(
'className' => 'Topico',
'joinTable' => 'topicos_topicos',
'foreignKey' => 'topico_id1',
'associationForeignKey' => 'topico_id',
'unique' => true,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
'deleteQuery' => '',
'insertQuery' => ''
)
)

Se alguém puder me ajudar, ficarei muito grato.

Atenciosamente, 

Walison Soares
Programador Júnior
Centro de Informática/Desenvolvimento
Faculdade de Medicina/UFMG




Thiago Belem

unread,
Dec 2, 2011, 2:55:39 PM12/2/11
to cakep...@googlegroups.com
As duas colunas chamam topico_id? Você não pode ter duas colunas com o mesmo nome em uma tabela.

Abs,
--
Thiago Belem
Desenvolvedor
Rio de Janeiro - RJ - Brasil

+55 (21) 8865.9250
thiagobelem.net
con...@thiagobelem.net

Skype / gTalk » thiago.belem.web
LinkedIn » br.linkedin.com/in/thiagobelem/pt
Assando Sites
, curso de CakePHP » assando-sites.com.br


Walison

unread,
Dec 2, 2011, 3:13:36 PM12/2/11
to cakep...@googlegroups.com
Não, uma chama-se topico_id e a outra topico_id1.

Até mais...

Walison Soares
Programador Júnior
Centro de Informática/Desenvolvimento
Faculdade de Medicina/UFMG




Carliton Queiroz

unread,
Dec 3, 2011, 11:17:16 AM12/3/11
to CakePHP Tuga
O seu caso não é semelhante a uma tabela de Categoria/Subcategoria ??

será que não da pra fazer somente uma table com os campos

id
campo1
campo2
campo...
teste_id

????

Walison

unread,
Dec 3, 2011, 9:25:04 PM12/3/11
to cakep...@googlegroups.com
É semelhante a categorias mesmo, mas, uma categoria pode se relacionar a outra categoria. E é ai que está o meu problema.

Suponhamos que na minha tabela categoria temos um campo id e eu preciso relacionar essa categoria a outras categorias. Então eu teria que criar uma tabela pra relacionar muitos com muitos certo? O problema é que a tabela seria relacionada com a mesma tabela, então a chave estrangeira deveria se chamar categoria_id, mas, não posso ter dois campos com o mesmo nome e por isso tenho categoria_id (topico_id) e categoria_id1 (topico_id1).

Será que o cake consegue tratar isso?

Obrigado a todos pelas respostas!

Walison Soares
Programador Júnior
Centro de Informática/Desenvolvimento
Faculdade de Medicina/UFMG




2011/12/3 Carliton Queiroz <carl...@gmail.com>

Vitor Pacheco

unread,
Dec 3, 2011, 10:05:38 PM12/3/11
to cakep...@googlegroups.com
Se eu entendi direito, acho que seria o caso de você dar uma olhada no Tree Behavior[1].

[1] http://book.cakephp.org/view/1339/Tree
--
Vitor Pacheco
Skype: vitor.pacheco.costa
Msn: vito...@hotmail.com

Cel.: 71 8626-7909
Tel.: 71 3378-5778 /
 71 3287-3475

Carliton Queiroz

unread,
Dec 6, 2011, 11:41:45 AM12/6/11
to CakePHP Tuga
Você pode usar uma única tabela sim... veja um exemplo

<?php
class Post extends AppModel {
public $name = 'Post';

public $belongsTo = array(
'Parent' => array(
'className' => 'Post',
'foreignKey' => 'parent_id'
)
);

public $hasMany = array(
'Children' => array(
'className' => 'Post',
'foreignKey' => 'parent_id'
)
);
}

Mais em http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#multiple-relations-to-the-same-model

Reply all
Reply to author
Forward
0 new messages