Tabella pivot universale ORM Kohana (KO3) (campi: model1, model1_id, model2, model2_id) - possibile?

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

Domanda

Ho la seguente configurazione di modelli:

User
   - has_many File (for userpics)

Gallery
   - has_many File (for images)

Page
   - has_one File (for background image)

L'oggetto Pagina potrebbe condividere un oggetto File con uno o più oggetti della Galleria per lo sfondo.E a un certo punto più tardi un nuovo modello come

Product
   - has_many File

o simili possono essere visualizzati nell'app.

Nota che ho bisogno di un modello di file invece di memorizzare semplicemente i percorsi dei file effettivi perché il modello di file può fare riferimento, infatti, a diversi file nel filesystem

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....

Quindi, esiste un modo semplice (senza sovrascrivere l'intera classe ORM) per implementare relazioni che utilizzerebbero una tabella pivot "generica" con i seguenti campi:

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

Il motivo: desidero avere un modulo App universale per il controllo dei file "orfani" ed essere anche in grado di indicare a cosa è allegato ciascun file, quindi, ad esempio, quando si elimina un file dalla Galleria l'appavvisa che il file è ancora allegato a una pagina come sfondo.

È stato utile?

Soluzione

La risposta breve è no.Il motivo è perché model_id entrerebbe in conflitto con altri ID modello.Se lo desideri, potresti creare un indice univoco su model_name + model_id, ma per unire queste due colonne sarebbe necessario riscrivere i metodi ORM per unire i modelli tramite le loro relazioni.

Sinceramente mi atterrei a semplici tabelle pivot.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top