Kohana (KO3) ORM Universal Pivot Table (Felder: model1, model1_id, model2, model2_id) - möglich?

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

Frage

Ich habe die folgenden Modelle:

User
   - has_many File (for userpics)

Gallery
   - has_many File (for images)

Page
   - has_one File (for background image)

Das Seitenobjekt kann ein Dateiobjekt mit einem oder mehreren Galerieobjekten als Hintergrund freigeben.Und irgendwann später ein neues Modell wie

Product
   - has_many File

oder ähnliches kann in der App angezeigt werden.

Beachten Sie, dass ich ein Dateimodell benötige, anstatt nur Pfade zu den tatsächlichen Dateien zu speichern, da das Dateimodell tatsächlich auf mehrere Dateien im Dateisystem verweisen kann

File
   - id
   - path
   - path_poster
   - path_m4v     (HTML5 videos need up to three files for compatibility)
   - path_webm
   - path_ogv
   - width
   - height
   - poster_width
   - poster_height
   - type
   - ... etc....

Gibt es also eine einfache Möglichkeit (ohne die gesamte ORM-Klasse zu überschreiben), Beziehungen zu implementieren, die eine "generische" Pivot-Tabelle mit den folgenden Feldern verwenden würden:

model_name VARCHAR(8) (or model_type_id TINYINT for speed)
model_id INT
file_id INT
relation_name VARCHAR(8)  (e.g., Page model can have "background" and "logo" relation)
position INT

Der Grund: Ich möchte ein universelles App-Modul zum Suchen nach "verwaisten" Dateien haben und auch in der Lage sein, zu erkennen, an welche Dateien jede Datei angehängt ist, z. B. beim Löschen einer Datei aus der Galeriewarnen, dass die Datei weiterhin als Hintergrund an eine Seite angehängt ist.

War es hilfreich?

Lösung

Kurze Antwort ist nein.Der Grund dafür ist, dass model_id mit anderen Modell-IDs in Konflikt geraten würde.Wenn Sie möchten, können Sie einen eindeutigen Index für model_name + model_id erstellen. Um diese beiden Spalten zu verknüpfen, müssen Sie jedoch die ORM-Methoden neu schreiben, um Modelle über ihre Beziehungen miteinander zu verbinden.

Ich würde mich ehrlich an einfache Pivot-Tabellen halten.

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