Was Sie beschreiben, ist eine Art HABTM (hasAndBelongsToMany) Vereinigung. Sie könnten die Inter-Model-Assoziationen so definieren, wie Sie es vorschlagen, aber es gibt einen beträchtlichen Designfehler: Wie würden Sie eine Situation berücksichtigen, in der die gleiche ID für einen orgs
Datensatz und einen contents
Datensatz verwendet wird und diese mit demselben verknüpft werden sollen folder
aufnehmen? Es wäre unmöglich, zwischen den beiden in Ihrem Tisch zu unterscheiden.
Es gibt eine Reihe von Möglichkeiten, um dies zu umgehen, aber sie erfordern mehr Programmlogik oder ein unorganisierteres Datenbankschema, das Herausforderungen in der Wartbarkeit darstellt.
Die elegantere, robustere Lösung ist die Rationalisierung Ihrer Datenbankstruktur. Wenn es keine ist dringende Notwendigkeit haben eine Table-Join Them All Regel, könnten Sie Ihr Modell Verbände wie dieses Design:
Content hasMany ContentsFolder belongsTo Folder
Folder hasMany ContentsFolder belongsTo Content
Org hasMany OrgsFolder belongsTo Folder
Folder hasMany OrgsFolder belongsTo Org
Dies ist die interne Struktur einer HABTM-Assoziation, die explizit definiert ist, damit Sie c Definieren Sie Felder in der Verbindungstabelle. Ihre contents
und folders
Tabellen würde gleich bleiben, aber Ihre beiden Verbindungs Tabellen aussehen würde:
contents_folders
-> id
-> content_id
-> order
orgs_folders
-> id
-> org_id
-> order
Leider ja, würde dies fünf Modelle anstelle von drei erfordern definieren, aber so sind die Grenzen von CakePHP objektrelationalen Modellieren.
'folder_elements' wird Kuchen Konventionen brechen, so dass es ist sehr nicht empfohlen, Uhr Daniel vorgeschlagene Lösung – Ish