Was ist der beste Weg, um eine tableA HABTM tableA Beziehung für eine CakePHP Anwendung zu erstellen?

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

  •  03-07-2019
  •  | 
  •  

Frage

Ich habe die Notwendigkeit, die Funktionalität erstellen registrierten Benutzer zu ermöglichen, sich mit anderen Nutzungen zu verbinden und eine Familie zu gründen. Meine Datenbank-Tabellen wie folgt aussehen:

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

  • id
  • name
  • E-Mail

db.persons_persons

  • id
  • person__id_parent
  • person_id_child
  • relationtype_id

db.relationtypes - (Ehegatte, Kind, Neffen, etc.)

  • id
  • name

Mit dieser Struktur soll ich in der Lage sein, zu spezifizieren, dass Bob ein Ehegatte von Jane in der persons_persons Tabelle ist. Der Rekord in db.persons_persons aussehen würde etwas (psuedo):

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

Ich weiß, dies könnte eine Datenfragmentierung verursachen, da, wenn Bob und Jane verheiratet sind, dann würde ein Kind von einem haben mit dem anderen verbunden sein. Aber das ist nicht meine Frage. Meine Frage ist, ob diese Datenbank-Setup ist ‚am meisten richtiger‘ für den Einsatz in einer CakePHP Anwendung.

War es hilfreich?

Lösung

Zum einem CakePHP wird automatigally eine people Tabelle in einen people-Controller und ein person Modell inflect, so dass Sie es persons nicht nennen müssen. Dann würde ich die Lookup-Tabelle relationships nennen anstatt persons_persons.

würde ich die Felder in Ihren Beziehungen Tabelle person_id nennen, relation_id und relation_type_id, und dann einen Unterstrich in Ihrem relationtypes Tabellennamen hinzufügen, damit es relation_types wird.

Ich denke, das semantische ist.

Sie können nach wie vor eine hasAndBelongsToMany Vereinigung, verwenden und die Verwendung des Automagic „ mit “von CakePHP angeboten Verbänden (1.2 nur) für Beziehungstyp der zusätzlichen Daten in der HABTM Tabelle zugreifen zu können.

Allerdings habe ich versucht sein würde zu verwenden:

  • Person hasMany Relation
  • Relation belongsTo Person, Relation, RelationType

In der App ist eine Beziehung Personen implizierte Beziehung jemand anderes zu ihnen? D. h wenn Sie feststellen, Person.id = 1 Sie könnten alle ihre Beziehungen erhalten, zum Beispiel Person.id 2, 3 und 4. Aber wenn Sie Person.id 2 finden, würden Sie nicht automatisch erhalten Person.id = 1, es sei denn, es gab einen anderen Datensatz in der Tabelle Beziehungen, die diese Beziehung dargestellt.

Um dies zu erreichen, können Sie eine andere assocation einrichten:

  • Person hasMany Relation1 mit foreignKey person_id
  • Person hasMany Relation2 mit foreignKey relation_id
  • Relation belongsTo Person, Relation, RelationType

Beachten Sie, können Sie diese doppelte Beziehung mit HABTM erreichen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top