Quel est le meilleur moyen de créer une relation tableA HABTM tableA pour une application CakePHP?
-
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
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.
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 derelations
-
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 beaucoupRelation1
avec foreignKeyID_personne
-
Personne
a beaucoupRelation2
avec foreignKeyid_relation
-
Relation
appartient àPersonne
,Relation
,RelationType
Notez que vous pouvez également réaliser cette double relation avec HAB ™.