Pergunta

Eu estou tentando criar um jogo baseado na web CakePHP principalmente para a prática, bem como para se divertir, mas estou correndo em um dilema tentando descobrir um sistema de equipamentos.

Eu tenho uma tabela de itens que contém todas as informações possíveis sobre um item, incluindo um campo item_type que contém um valor inteiro determinar o que o tipo de item é, e resultante, que informações sobre o item de uso.

i. item_type = '1' significa que o item é um chapéu para uso, o que significa que apenas o poder, preço, bônus e requisitos são informações necessárias. Isso tudo funciona bem.

Eu também tenho uma tabela HABTM items_users criado para armazenar todos os itens actualmente propriedade que cada jogador tem, esta multa, também está funcionando.

O que eu estou tentando descobrir é como um sistema de equipamento iria funcionar. Primeiro pensei sobre uma equipa de mesa, tais como:

    CREATE TABLE `aevum_tf`.`equips` (
`id` INT NOT NULL ,
`user_id` INT NOT NULL ,
`hat_id` INT NOT NULL ,
`wep_id` INT NOT NULL ,
`offhand_id` INT NOT NULL ,
`pants_id` INT NOT NULL ,
`acca_id` INT NOT NULL ,
`accb_id` INT NOT NULL ,
`accc_id` INT NOT NULL ,
`shirt_id` INT NOT NULL ,
`created` DATETIME NOT NULL ,
`modified` DATETIME NOT NULL ,
PRIMARY KEY ( `id` ) ,
UNIQUE (
`user_id`
)
) ENGINE = InnoDB 

O único problema com o uso de um sistema como este é que o CakePHP não suporta várias chaves estrangeiras para um modelo.

Alguém tem alguma idéia de como implementar tal sistema?

Editar A tabela HABTM existente de items_users é usado para armazenar os itens que um usuário possui atualmente. Cada vez que um usuário adquire um novo item, é id e id do usuário é armazenado na tabela de items_users. Eu só estou tentando descobrir como implementar um sistema de equipamentos.

Por não suporta múltiplas chaves estrangeiras, quero dizer CakePHP não suporta múltiplas chaves estrangeiras de uma tabela em outra tabela. Meu exemplo equipa tabela tem 8 teclas de estrangeiros, todos apontando para item_id é.

ver: https://trac.cakephp.org/ticket/1923

Foi útil?

Solução

Eu descobri que as relações HABTM são os melhores para relacionamentos simples, não mais complexos, como você está descrevendo acima. A idéia de um relacionamento HABTM é fazer com que a mesa quase invisível se juntar para que você não tem que manter as chaves estrangeiras extras. Ele funciona bem para casos simples.

No seu caso, você tem a mesa de equips que iria se juntar a todos os outros aspectos de seu sistema. No projeto, você precisa de um ponto de partida. Eu imagino que o "usuário" seria que o ponto de partida eo usuário teria muitas equips. Você pode limitar um usuário para ter apenas um equip, que quase se prestaria a fusão do utilizador e equipa tabelas em um único.

Em qualquer caso, é necessário começar por definir as regras.

Usuários -> hasOne -> Equips Equips -> Pertence -> Usuário

De acordo com seu deisgn banco de dados, ele se parece com as seguintes relações seriam feitas. Equips -> Pertence -> Hat Equips -> Pertence -> Pant Equips -> Pertence -> Wep WEP -> HasMany -> Equips ...

Para construir a melhor aplicação, o que eu sugiro é construir toda relação possível e olhar para o conjunto de dados resultante de cada vista ...

$this->User->recursive = 2; 
pr($this->User->find("first");

De lá, eu iria redesenhar as tabelas para obter uma estrutura que parece ser bom e faz sentido. Em seguida, corte as relações desnecessários.

Também passar algum tempo olhando para modelos unbinding ligação e. Isso permitirá que você personalize de forma mais eficaz os dados e relações uma vez que o projeto de banco de dados é estável.

Espero que isso ajude um pouco.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top