Quel est le meilleur moyen de créer une relation tableA HABTM tableA pour une application CakePHP?

StackOverflow https://stackoverflow.com/questions/226805

  •  03-07-2019
  •  | 
  •  

Question

J'ai besoin de créer cette fonctionnalité pour permettre à mes utilisateurs enregistrés de s’associer à d’autres utilisations et de créer une famille. Mes tables de base de données ressemblent à ceci:

db.persons - (Bob, Jane, Timmy, etc.)

  • id
  • nom
  • email

db.persons_persons

  • id
  • personne__id_parent
  • person_id_child
  • relationtype_id

db.relationtypes - (conjoint, enfant, neveu, etc.)

  • id
  • nom

Avec cette structure, je devrais pouvoir spécifier que Bob est un époux de Jane dans la table personnes_persons. L’enregistrement dans db.persons_persons ressemblerait à quelque chose comme (psuedo):

ID | person_parent | person_child | relationtype
1  | Bob           | Jane         | Spouse
2  | Bob           | Timmy        | Child

Je réalise que cela pourrait entraîner une certaine fragmentation des données, car si Bob et Jane sont mariés, un enfant de l’un devrait être associé à l’autre. Cependant, ce n'est pas ma question. Ma question est de savoir si cette configuration de base de données est «la plus correcte» pour une utilisation dans une application cakePHP.

Était-ce utile?

La solution

Tout d'abord, CakePHP va automatiquement automatiser une table personnes dans un contrôleur personnes et un modèle personne , de sorte que vous n'avez pas besoin d'appeler il personnes . J'appellerais ensuite la table de consultation relations plutôt que personnes_persons .

J'appellerais les champs de votre table de relations id_personne , id_relation et id_type_relation , puis ajouterais un trait de soulignement dans votre relationtypes nom de la table de sorte qu'il devienne relation_types .

Je pense que c'est plus sémantique.

Vous pouvez toujours utiliser une association hasAndBelongsToMany et utiliser l’automagique avec " associations offertes par CakePHP (1.2 uniquement) pour accéder aux données supplémentaires de la table HABTM pour le type de relation.

Cependant, je serais tenté d'utiliser:

  • Personne a beaucoup de relations
  • Relation appartient à Personne , Relation , RelationType

Dans votre application, une relation de personne est-elle impliquée par la relation de quelqu'un d'autre avec elles? C'est à dire. Si vous trouvez Person.id = 1, vous pouvez obtenir toutes leurs relations, par exemple. Person.id 2, 3 and 4. Mais si vous trouvez Person.id 2, vous n'obtiendrez pas automatiquement Person.id = 1, à moins qu'un autre enregistrement dans la table des relations représente cette relation.

Pour ce faire, vous pouvez configurer une autre association:

  • Personne a beaucoup Relation1 avec foreignKey ID_personne
  • Personne a beaucoup Relation2 avec foreignKey id_relation
  • Relation appartient à Personne , Relation , RelationType

Notez que vous pouvez également réaliser cette double relation avec HAB ™.

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