Question

Je tente de créer un jeu Web basé sur CakePHP principalement pour la pratique mais aussi pour le plaisir, mais je me heurte à une énigme pour essayer de trouver un système d'équipement.

J'ai une table Items qui contient toutes les informations possibles sur un élément, y compris un champ item_type contenant une valeur entière déterminant le type d'élément et les résultats obtenus, ainsi que les informations sur l'élément à utiliser.

i.e. item_type = '1' signifie que l'élément est un chapeau à utiliser, ce qui signifie que seuls le pouvoir, le prix, les bonus et les conditions requises sont les informations nécessaires. Tout cela fonctionne bien.

J'ai également une table items_users HABTM configurée pour stocker tous les éléments actuellement détenus par chaque joueur. Cela fonctionne également très bien.

Ce que j'essaie de comprendre, c'est comment un système d'équipement fonctionnerait. J'ai d'abord pensé à une table équipée telle que:

    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 

Le seul problème avec un système comme celui-ci est que CakePHP ne supporte pas plusieurs clés étrangères pour un modèle.

Quelqu'un at-il des idées sur la manière de mettre en place un tel système?

EDIT La table HABTM existante de items_users est utilisée pour stocker les éléments actuellement détenus par un utilisateur. Chaque fois qu'un utilisateur acquiert un nouvel élément, son identifiant et son identifiant sont stockés dans la table items_users. J'essaie simplement de comprendre comment mettre en œuvre un système d'équipement.

Par ne supporte pas plusieurs clés étrangères, je veux dire que CakePHP ne supporte pas de manière native plusieurs clés étrangères d'une table dans une autre. Mon exemple équipe table a 8 clés étrangères, toutes pointant vers item_id.

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

Était-ce utile?

La solution

J'ai constaté que les relations HABTM sont les meilleures pour les relations simples, et non complexes comme vous le décrivez ci-dessus. L'idée d'une relation HABTM est de rendre la table de jointure presque invisible afin que vous n'ayez pas à gérer les clés étrangères supplémentaires. Cela fonctionne bien pour les cas simples.

Dans votre cas, vous avez la table equips qui se joindrait à tous les autres aspects de votre système. Dans la conception, vous avez besoin d'un point de départ. J'imagine l'utilisateur " utilisateur " serait ce point de départ et l'utilisateur aurait beaucoup d'équipes. Vous pouvez limiter un utilisateur à un seul équipement, ce qui lui permettrait presque de fusionner l’utilisateur et d’équiper les tables en un seul.

Dans tous les cas, vous devez commencer par définir les règles.

Utilisateur - > HasOne - > Équipe Equips - > Appartient à - > Utilisateur

Selon votre base de données, il semble que les relations suivantes seraient établies. Equips - > Appartient à - > Chapeau Equips - > Appartient à - > Haleter Equips - > Appartient à - > Wep Wep - > HasMany - > Équipe ...

Pour créer la meilleure application, je suggérerais de créer toutes les relations possibles et d'examiner l'ensemble de données résultant de chaque vue ...

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

À partir de là, je redessinerais les tableaux pour obtenir une structure qui soit belle et qui ait du sens. Puis coupez les relations inutiles.

Passez également un peu de temps à examiner les modèles de liaison et de séparation. Cela vous permettra de personnaliser plus efficacement les données et les relations une fois que la conception de la base de données sera stable.

J'espère que ça aide un peu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top